1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414 |
- /**
- osdep.h -- O/S abstraction for products using MakeMe.
- */
- #ifndef _h_OSDEP
- #define _h_OSDEP 1
- /********************************** Includes **********************************/
- #include "me.h"
- /******************************* Default Features *****************************/
- /*
- MakeMe defaults
- */
- #ifndef ME_COM_SSL
- #define ME_COM_SSL 0 /**< Build without SSL support */
- #endif
- #ifndef ME_DEBUG
- #define ME_DEBUG 0 /**< Default to a debug build */
- #endif
- #ifndef ME_FLOAT
- #define ME_FLOAT 1 /**< Build with floating point support */
- #endif
- #ifndef ME_ROM
- #define ME_ROM 0 /**< Build for execute from ROM */
- #endif
- /********************************* CPU Families *******************************/
- /*
- CPU Architectures
- */
- #define ME_CPU_UNKNOWN 0
- #define ME_CPU_ARM 1 /**< Arm */
- #define ME_CPU_ITANIUM 2 /**< Intel Itanium */
- #define ME_CPU_X86 3 /**< X86 */
- #define ME_CPU_X64 4 /**< AMD64 or EMT64 */
- #define ME_CPU_MIPS 5 /**< Mips */
- #define ME_CPU_PPC 6 /**< Power PC */
- #define ME_CPU_SPARC 7 /**< Sparc */
- #define ME_CPU_TIDSP 8 /**< TI DSP */
- #define ME_CPU_SH 9 /**< SuperH */
- /*
- Byte orderings
- */
- #define ME_LITTLE_ENDIAN 1 /**< Little endian byte ordering */
- #define ME_BIG_ENDIAN 2 /**< Big endian byte ordering */
- /*
- Use compiler definitions to determine the CPU type.
- The default endianness can be overridden by configure --endian big|little.
- */
- #if defined(__alpha__)
- #define ME_CPU "alpha"
- #define ME_CPU_ARCH ME_CPU_ALPHA
- #define CPU_ENDIAN ME_LITTLE_ENDIAN
- #elif defined(__arm__)
- #define ME_CPU "arm"
- #define ME_CPU_ARCH ME_CPU_ARM
- #define CPU_ENDIAN ME_LITTLE_ENDIAN
- #elif defined(__arm64__) || defined(__aarch64__)
- #define ME_CPU "arm"
- #define ME_CPU_ARCH ME_CPU_ARM
- #define CPU_ENDIAN ME_LITTLE_ENDIAN
- #elif defined(__x86_64__) || defined(_M_AMD64)
- #define ME_CPU "x64"
- #define ME_CPU_ARCH ME_CPU_X64
- #define CPU_ENDIAN ME_LITTLE_ENDIAN
- #elif defined(__i386__) || defined(__i486__) || defined(__i585__) || defined(__i686__) || defined(_M_IX86)
- #define ME_CPU "x86"
- #define ME_CPU_ARCH ME_CPU_X86
- #define CPU_ENDIAN ME_LITTLE_ENDIAN
- #elif defined(_M_IA64)
- #define ME_CPU "ia64"
- #define ME_CPU_ARCH ME_CPU_ITANIUM
- #define CPU_ENDIAN ME_LITTLE_ENDIAN
- #elif defined(__mips__) || defined(__mips64)
- #define ME_CPU "mips"
- #define ME_CPU_ARCH ME_CPU_MIPS
- #define CPU_ENDIAN ME_BIG_ENDIAN
- #elif defined(__ppc__) || defined(__powerpc__) || defined(__ppc64__) || defined(__ppc)
- #define ME_CPU "ppc"
- #define ME_CPU_ARCH ME_CPU_PPC
- #define CPU_ENDIAN ME_BIG_ENDIAN
- #elif defined(__sparc__)
- #define ME_CPU "sparc"
- #define ME_CPU_ARCH ME_CPU_SPARC
- #define CPU_ENDIAN ME_BIG_ENDIAN
- #elif defined(_TMS320C6X)
- #define TIDSP 1
- #define ME_CPU "tidsp"
- #define ME_CPU_ARCH ME_CPU_SPARC
- #define CPU_ENDIAN ME_LITTLE_ENDIAN
- #elif defined(__sh__)
- #define ME_CPU "sh"
- #define ME_CPU_ARCH ME_CPU_SH
- #define CPU_ENDIAN ME_LITTLE_ENDIAN
- #else
- #error "Cannot determine CPU type in osdep.h"
- #endif
- /*
- Set the default endian if me.h does not define it explicitly
- */
- #ifndef ME_ENDIAN
- #define ME_ENDIAN CPU_ENDIAN
- #endif
- /*
- Operating system defines. Use compiler standard defintions to sleuth. Works for all except VxWorks which does not
- define any special symbol. NOTE: Support for SCOV Unix, LynxOS and UnixWare is deprecated.
- */
- #if defined(__APPLE__)
- #define ME_OS "macosx"
- #define MACOSX 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #define ME_BSD_LIKE 1
- #define HAS_USHORT 1
- #define HAS_UINT 1
- #elif defined(__linux__)
- #define ME_OS "linux"
- #define LINUX 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #elif defined(__FreeBSD__)
- #define ME_OS "freebsd"
- #define FREEBSD 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #define ME_BSD_LIKE 1
- #define HAS_USHORT 1
- #define HAS_UINT 1
- #elif defined(__OpenBSD__)
- #define ME_OS "freebsd"
- #define OPENBSD 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #define ME_BSD_LIKE 1
- #elif defined(_WIN32)
- #define ME_OS "windows"
- #define WINDOWS 1
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 1
- #elif defined(__OS2__)
- #define ME_OS "os2"
- #define OS2 0
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 0
- #elif defined(MSDOS) || defined(__DME__)
- #define ME_OS "msdos"
- #define WINDOWS 0
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 0
- #elif defined(__NETWARE_386__)
- #define ME_OS "netware"
- #define NETWARE 0
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 0
- #elif defined(__bsdi__)
- #define ME_OS "bsdi"
- #define BSDI 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #define ME_BSD_LIKE 1
- #elif defined(__NetBSD__)
- #define ME_OS "netbsd"
- #define NETBSD 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #define ME_BSD_LIKE 1
- #elif defined(__QNX__)
- #define ME_OS "qnx"
- #define QNX 0
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 0
- #elif defined(__hpux)
- #define ME_OS "hpux"
- #define HPUX 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #elif defined(_AIX)
- #define ME_OS "aix"
- #define AIX 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #elif defined(__CYGWIN__)
- #define ME_OS "cygwin"
- #define CYGWIN 1
- #define ME_UNIX_LIKE 1
- #define ME_WIN_LIKE 0
- #elif defined(__VMS)
- #define ME_OS "vms"
- #define VMS 1
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 0
- #elif defined(VXWORKS)
- /* VxWorks does not have a pre-defined symbol */
- #define ME_OS "vxworks"
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 0
- #define HAS_USHORT 1
- #elif defined(ECOS)
- /* ECOS may not have a pre-defined symbol */
- #define ME_OS "ecos"
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 0
- #elif defined(TIDSP)
- #define ME_OS "tidsp"
- #define ME_UNIX_LIKE 0
- #define ME_WIN_LIKE 0
- #define HAS_INT32 1
- #endif
- #if __WORDSIZE == 64 || __amd64 || __x86_64 || __x86_64__ || _WIN64 || __mips64 || __arch64__ || __arm64__
- #define ME_64 1
- #define ME_WORDSIZE 64
- #else
- #define ME_64 0
- #define ME_WORDSIZE 32
- #endif
- /*
- Unicode
- */
- #ifndef ME_CHAR_LEN
- #define ME_CHAR_LEN 1
- #endif
- #if ME_CHAR_LEN == 4
- typedef int wchar;
- #define UT(s) L ## s
- #define UNICODE 1
- #elif ME_CHAR_LEN == 2
- typedef short wchar;
- #define UT(s) L ## s
- #define UNICODE 1
- #else
- typedef char wchar;
- #define UT(s) s
- #endif
- #define ME_PLATFORM ME_OS "-" ME_CPU "-" ME_PROFILE
- /********************************* O/S Includes *******************************/
- /*
- Out-of-order definitions and includes. Order really matters in this section.
- */
- #if WINDOWS
- #undef _CRT_SECURE_NO_DEPRECATE
- #define _CRT_SECURE_NO_DEPRECATE 1
- #undef _CRT_SECURE_NO_WARNINGS
- #define _CRT_SECURE_NO_WARNINGS 1
- #define _WINSOCK_DEPRECATED_NO_WARNINGS 1
- #ifndef _WIN32_WINNT
- /* Target Windows 7 by default */
- #define _WIN32_WINNT 0x601
- #endif
- /*
- Work-around to allow the windows 7.* SDK to be used with VS 2012
- MSC_VER 1800 2013
- MSC_VER 1900 2015
- */
- #if _MSC_VER >= 1700
- #define SAL_SUPP_H
- #define SPECSTRING_SUPP_H
- #endif
- #endif
- #if LINUX
- /*
- Use GNU extensions for:
- RTLD_DEFAULT for dlsym()
- */
- #define _GNU_SOURCE 1
- #if !ME_64
- #define _LARGEFILE64_SOURCE 1
- #ifdef __USE_FILE_OFFSET64
- #define _FILE_OFFSET_BITS 64
- #endif
- #endif
- #endif
- #if VXWORKS
- #ifndef _VSB_CONFIG_FILE
- #define _VSB_CONFIG_FILE "vsbConfig.h"
- #endif
- #include <vxWorks.h>
- #endif
- #if ME_WIN_LIKE
- #include <winsock2.h>
- #include <windows.h>
- #include <winbase.h>
- #include <winuser.h>
- #include <shlobj.h>
- #include <shellapi.h>
- #include <wincrypt.h>
- #include <ws2tcpip.h>
- #include <conio.h>
- #include <process.h>
- #include <windows.h>
- #include <shlobj.h>
- #if _MSC_VER >= 1800
- #include <stdbool.h>
- #endif
- #if ME_DEBUG
- #include <crtdbg.h>
- #endif
- #endif
- /*
- Includes in alphabetic order
- */
- #include <ctype.h>
- #if ME_WIN_LIKE
- #include <direct.h>
- #else
- #include <dirent.h>
- #endif
- #if ME_UNIX_LIKE
- #include <dlfcn.h>
- #endif
- #include <fcntl.h>
- #include <errno.h>
- #if ME_FLOAT
- #include <float.h>
- #define __USE_ISOC99 1
- #include <math.h>
- #endif
- #if ME_UNIX_LIKE
- #include <grp.h>
- #endif
- #if ME_WIN_LIKE
- #include <io.h>
- #endif
- #if MACOSX || LINUX
- #include <libgen.h>
- #endif
- #include <limits.h>
- #if ME_UNIX_LIKE || VXWORKS
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <net/if.h>
- #include <netinet/in.h>
- #include <netinet/tcp.h>
- #include <netinet/ip.h>
- #endif
- #if ME_UNIX_LIKE
- #include <pthread.h>
- #include <pwd.h>
- #if !CYGWIN
- #include <resolv.h>
- #endif
- #endif
- #if ME_BSD_LIKE
- #include <readpassphrase.h>
- #include <sys/sysctl.h>
- #endif
- #include <setjmp.h>
- #include <signal.h>
- #include <stdarg.h>
- #if ME_UNIX_LIKE
- #include <stdint.h>
- #endif
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #if ME_UNIX_LIKE
- #include <syslog.h>
- #endif
- #if !TIDSP
- #include <sys/stat.h>
- #include <sys/types.h>
- #endif
- #if ME_UNIX_LIKE
- #include <sys/ioctl.h>
- #include <sys/mman.h>
- #include <sys/resource.h>
- #include <sys/select.h>
- #include <sys/time.h>
- #include <sys/times.h>
- #include <sys/utsname.h>
- #include <sys/uio.h>
- #include <sys/wait.h>
- #include <poll.h>
- #include <unistd.h>
- #endif
- #include <time.h>
- #if !VXWORKS && !TIDSP
- #include <wchar.h>
- #endif
- /*
- Extra includes per O/S
- */
- #if CYGWIN
- #include "w32api/windows.h"
- #include "sys/cygwin.h"
- #endif
- #if LINUX
- #include <linux/version.h>
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- #include <sys/epoll.h>
- #endif
- #include <sys/prctl.h>
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
- #include <sys/eventfd.h>
- #endif
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
- #define HAS_INOTIFY 1
- #include <sys/inotify.h>
- #else
- #define HAS_INOTIFY 0
- #endif
- #if !__UCLIBC__
- #include <sys/sendfile.h>
- #endif
- #endif
- #if MACOSX
- #include <stdbool.h>
- #include <mach-o/dyld.h>
- #include <mach-o/dyld.h>
- #include <mach/mach_init.h>
- #include <mach/mach_time.h>
- #include <mach/task.h>
- #include <libkern/OSAtomic.h>
- #endif
- #if VXWORKS
- #include <vxWorks.h>
- #include <envLib.h>
- #include <iosLib.h>
- #include <loadLib.h>
- #include <selectLib.h>
- #include <sockLib.h>
- #include <inetLib.h>
- #include <ioLib.h>
- #include <pipeDrv.h>
- #include <hostLib.h>
- #include <sysSymTbl.h>
- #include <sys/fcntlcom.h>
- #include <tickLib.h>
- #include <taskHookLib.h>
- #include <unldLib.h>
- #if _WRS_VXWORKS_MAJOR >= 6
- #include <wait.h>
- #endif
- #if _WRS_VXWORKS_MAJOR > 6 || (_WRS_VXWORKS_MAJOR == 6 && _WRS_VXWORKS_MINOR >= 8)
- #include <symSync.h>
- #include <vxAtomicLib.h>
- #endif
- #endif
- #if TIDSP
- #include <mathf.h>
- #include <netmain.h>
- #include <nettools/inc/dnsif.h>
- #include <socket.h>
- #include <file.h>
- #endif
- /************************************** Types *********************************/
- /*
- Standard types
- */
- #ifndef HAS_BOOL
- #ifndef __cplusplus
- #if !MACOSX
- #define HAS_BOOL 1
- /**
- Boolean data type.
- */
- #if !WINDOWS || ((_MSC_VER < 1800) && !defined(bool))
- /* Bool introduced via stdbool in VS 2015 */
- typedef char bool;
- #endif
- #endif
- #endif
- #endif
- #ifndef HAS_UCHAR
- #define HAS_UCHAR 1
- /**
- Unsigned char data type.
- */
- typedef unsigned char uchar;
- #endif
- #ifndef HAS_SCHAR
- #define HAS_SCHAR 1
- /**
- Signed char data type.
- */
- typedef signed char schar;
- #endif
- #ifndef HAS_CCHAR
- #define HAS_CCHAR 1
- /**
- Constant char data type.
- */
- typedef const char cchar;
- #endif
- #ifndef HAS_CUCHAR
- #define HAS_CUCHAR 1
- /**
- Unsigned char data type.
- */
- typedef const unsigned char cuchar;
- #endif
- /**** jimbo modify ****/
- #define HAS_USHORT
- #define HAS_UINT
- #define HAS_ULONG
- /***** jimbo end ****/
- #ifndef HAS_USHORT
- #define HAS_USHORT 1
- /**
- Unsigned short data type.
- */
- typedef unsigned short ushort;
- #endif
- #ifndef HAS_CUSHORT
- #define HAS_CUSHORT 1
- /**
- Constant unsigned short data type.
- */
- typedef const unsigned short cushort;
- #endif
- #ifndef HAS_CVOID
- #define HAS_CVOID 1
- /**
- Constant void data type.
- */
- typedef const void cvoid;
- #endif
- #ifndef HAS_INT8
- #define HAS_INT8 1
- /**
- Integer 8 bits data type.
- */
- typedef char int8;
- #endif
- #ifndef HAS_UINT8
- #define HAS_UINT8 1
- /**
- Unsigned integer 8 bits data type.
- */
- typedef unsigned char uint8;
- #endif
- #ifndef HAS_INT16
- #define HAS_INT16 1
- /**
- Integer 16 bits data type.
- */
- typedef short int16;
- #endif
- #ifndef HAS_UINT16
- #define HAS_UINT16 1
- /**
- Unsigned integer 16 bits data type.
- */
- typedef unsigned short uint16;
- #endif
- #ifndef HAS_INT32
- #define HAS_INT32 1
- /**
- Integer 32 bits data type.
- */
- typedef int int32;
- #endif
- #ifndef HAS_UINT32
- #define HAS_UINT32 1
- /**
- Unsigned integer 32 bits data type.
- */
- typedef unsigned int uint32;
- #endif
- #ifndef HAS_UINT
- #define HAS_UINT 1
- /**
- Unsigned integer (machine dependent bit size) data type.
- */
- typedef unsigned int uint;
- #endif
- #ifndef HAS_ULONG
- #define HAS_ULONG 1
- /**
- Unsigned long (machine dependent bit size) data type.
- */
- typedef unsigned long ulong;
- #endif
- #ifndef HAS_CINT
- #define HAS_CINT 1
- /**
- Constant int data type.
- */
- typedef const int cint;
- #endif
- #ifndef HAS_SSIZE
- #define HAS_SSIZE 1
- #if ME_UNIX_LIKE || VXWORKS || DOXYGEN
- /**
- Signed integer size field large enough to hold a pointer offset.
- */
- typedef ssize_t ssize;
- #elif TIDSP
- typedef int ssize_t;
- typedef ssize_t ssize;
- #else
- typedef SSIZE_T ssize;
- #endif
- #endif
- /*
- Windows uses uint for write/read counts (Ugh!)
- */
- #if ME_WIN_LIKE
- typedef uint wsize;
- #else
- typedef ssize wsize;
- #endif
- #ifndef HAS_INT64
- #if ME_UNIX_LIKE
- __extension__ typedef long long int int64;
- #elif VXWORKS || DOXYGEN
- /**
- Integer 64 bit data type.
- */
- typedef long long int int64;
- #elif ME_WIN_LIKE
- typedef __int64 int64;
- #else
- typedef long long int int64;
- #endif
- #endif
- #ifndef HAS_UINT64
- #if ME_UNIX_LIKE
- __extension__ typedef unsigned long long int uint64;
- #elif VXWORKS || DOXYGEN
- typedef unsigned long long int uint64;
- #elif ME_WIN_LIKE
- typedef unsigned __int64 uint64;
- #else
- typedef unsigned long long int uint64;
- #endif
- #endif
- /**
- Signed file offset data type. Supports large files greater than 4GB in size on all systems.
- */
- typedef int64 Offset;
- #if DOXYGEN
- /** Size to hold the length of a socket address */
- typedef int Socklen;
- #elif VXWORKS
- typedef int Socklen;
- #else
- typedef socklen_t Socklen;
- #endif
- #if DOXYGEN || ME_UNIX_LIKE || VXWORKS
- /** Argument for sockets */
- typedef int Socket;
- #ifndef SOCKET_ERROR
- #define SOCKET_ERROR -1
- #endif
- #define SOCKET_ERROR -1
- #ifndef INVALID_SOCKET
- #define INVALID_SOCKET -1
- #endif
- #elif ME_WIN_LIKE
- typedef SOCKET Socket;
- #elif TIDSP
- typedef SOCKET Socket;
- #define SOCKET_ERROR INVALID_SOCKET
- #else
- typedef int Socket;
- #ifndef SOCKET_ERROR
- #define SOCKET_ERROR -1
- #endif
- #ifndef INVALID_SOCKET
- #define INVALID_SOCKET -1
- #endif
- #endif
- typedef int64 Time;
- /**
- Elapsed time data type. Stores time in milliseconds from some arbitrary start epoch.
- */
- typedef int64 Ticks;
- /**
- Time/Ticks units per second (milliseconds)
- */
- #define TPS 1000
- /*********************************** Defines **********************************/
- #ifndef BITSPERBYTE
- #define BITSPERBYTE ((int) (8 * sizeof(char)))
- #endif
- #ifndef BITS
- #define BITS(type) ((int) (BITSPERBYTE * (int) sizeof(type)))
- #endif
- #if ME_FLOAT
- #ifndef MAXFLOAT
- #if ME_WIN_LIKE
- #define MAXFLOAT DBL_MAX
- #else
- #define MAXFLOAT FLT_MAX
- #endif
- #endif
- #if VXWORKS
- #undef isnan
- #define isnan(n) ((n) != (n))
- #define isnanf(n) ((n) != (n))
- #define isinf(n) ((n) == (1.0 / 0.0) || (n) == (-1.0 / 0.0))
- #define isinff(n) ((n) == (1.0 / 0.0) || (n) == (-1.0 / 0.0))
- #endif
- #if ME_WIN_LIKE
- #define isNan(f) (_isnan(f))
- #elif VXWORKS || MACOSX || LINUX
- #define isNan(f) (isnan(f))
- #else
- #define isNan(f) (fpclassify(f) == FP_NAN)
- #endif
- #endif
- #if ME_WIN_LIKE
- #define INT64(x) (x##i64)
- #define UINT64(x) (x##Ui64)
- #else
- #define INT64(x) (x##LL)
- #define UINT64(x) (x##ULL)
- #endif
- #ifndef MAXINT
- #if INT_MAX
- #define MAXINT INT_MAX
- #else
- #define MAXINT 0x7fffffff
- #endif
- #endif
- #ifndef MAXUINT
- #if UINT_MAX
- #define MAXUINT UINT_MAX
- #else
- #define MAXUINT 0xffffffff
- #endif
- #endif
- #ifndef MAXINT64
- #define MAXINT64 INT64(0x7fffffffffffffff)
- #endif
- #ifndef MAXUINT64
- #define MAXUINT64 INT64(0xffffffffffffffff)
- #endif
- #if SIZE_T_MAX
- #define MAXSIZE SIZE_T_MAX
- #elif ME_64
- #define MAXSIZE INT64(0xffffffffffffffff)
- #else
- #define MAXSIZE MAXINT
- #endif
- #if SSIZE_T_MAX
- #define MAXSSIZE SSIZE_T_MAX
- #elif ME_64
- #define MAXSSIZE INT64(0x7fffffffffffffff)
- #else
- #define MAXSSIZE MAXINT
- #endif
- #if OFF_T_MAX
- #define MAXOFF OFF_T_MAX
- #else
- #define MAXOFF INT64(0x7fffffffffffffff)
- #endif
- /*
- Word size and conversions between integer and pointer.
- */
- #if ME_64
- #define ITOP(i) ((void*) ((int64) i))
- #define PTOI(i) ((int) ((int64) i))
- #define LTOP(i) ((void*) ((int64) i))
- #define PTOL(i) ((int64) i)
- #else
- #define ITOP(i) ((void*) ((int) i))
- #define PTOI(i) ((int) i)
- #define LTOP(i) ((void*) ((int) i))
- #define PTOL(i) ((int64) (int) i)
- #endif
- #undef PUBLIC
- #undef PUBLIC_DATA
- #undef PRIVATE
- #if ME_WIN_LIKE
- /*
- Use PUBLIC on function declarations and definitions (*.c and *.h).
- */
- #define PUBLIC __declspec(dllexport)
- #define PUBLIC_DATA __declspec(dllexport)
- #define PRIVATE static
- #else
- #define PUBLIC
- #define PUBLIC_DATA extern
- #define PRIVATE static
- #endif
- /* Undefines for Qt - Ugh */
- #undef max
- #undef min
- #define max(a,b) (((a) > (b)) ? (a) : (b))
- #define min(a,b) (((a) < (b)) ? (a) : (b))
- #ifndef PRINTF_ATTRIBUTE
- #if ((__GNUC__ >= 3) && !DOXYGEN) || MACOSX
- /**
- Use gcc attribute to check printf fns. a1 is the 1-based index of the parameter containing the format,
- and a2 the index of the first argument. Note that some gcc 2.x versions don't handle this properly
- */
- #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
- #else
- #define PRINTF_ATTRIBUTE(a1, a2)
- #endif
- #endif
- /*
- Optimize expression evaluation code depending if the value is likely or not
- */
- #undef likely
- #undef unlikely
- #if (__GNUC__ >= 3)
- #define likely(x) __builtin_expect(!!(x), 1)
- #define unlikely(x) __builtin_expect(!!(x), 0)
- #else
- #define likely(x) (x)
- #define unlikely(x) (x)
- #endif
- #if !__UCLIBC__ && !CYGWIN && __USE_XOPEN2K
- #define ME_COMPILER_HAS_SPINLOCK 1
- #endif
- #if ME_COMPILER_HAS_DOUBLE_BRACES
- #define NULL_INIT {{0}}
- #else
- #define NULL_INIT {0}
- #endif
- #ifdef __USE_FILE_OFFSET64
- #define ME_COMPILER_HAS_OFF64 1
- #else
- #define ME_COMPILER_HAS_OFF64 0
- #endif
- #if ME_UNIX_LIKE
- #define ME_COMPILER_HAS_FCNTL 1
- #endif
- #ifndef R_OK
- #define R_OK 4
- #define W_OK 2
- #if ME_WIN_LIKE
- #define X_OK R_OK
- #else
- #define X_OK 1
- #endif
- #define F_OK 0
- #endif
- #if MACOSX
- #define LD_LIBRARY_PATH "DYLD_LIBRARY_PATH"
- #else
- #define LD_LIBRARY_PATH "LD_LIBRARY_PATH"
- #endif
- #if VXWORKS
- /*
- Old VxWorks can't do array[]
- */
- #define ARRAY_FLEX 0
- #else
- #define ARRAY_FLEX
- #endif
- /*
- Deprecated API warnings
- */
- #if ((__GNUC__ >= 3) || MACOSX) && !VXWORKS && ME_DEPRECATED_WARNINGS
- #define ME_DEPRECATED(MSG) __attribute__ ((deprecated(MSG)))
- #else
- #define ME_DEPRECATED(MSG)
- #endif
- /********************************** Tunables *********************************/
- /*
- These can be defined in main.bit settings (pascal case) to override. E.g.
- settings: {
- maxPath: 4096
- }
- */
- #ifndef ME_MAX_FNAME
- #define ME_MAX_FNAME 256 /**< Reasonable filename size */
- #endif
- #ifndef ME_MAX_PATH
- #define ME_MAX_PATH 1024 /**< Reasonable filename size */
- #endif
- #ifndef ME_BUFSIZE
- #define ME_BUFSIZE 4096 /**< Reasonable size for buffers */
- #endif
- #ifndef ME_MAX_BUFFER
- #define ME_MAX_BUFFER ME_BUFSIZE /* DEPRECATE */
- #endif
- #ifndef ME_MAX_ARGC
- #define ME_MAX_ARGC 32 /**< Maximum number of command line args if using MAIN()*/
- #endif
- #ifndef ME_DOUBLE_BUFFER
- #define ME_DOUBLE_BUFFER (DBL_MANT_DIG - DBL_MIN_EXP + 4)
- #endif
- #ifndef ME_MAX_IP
- #define ME_MAX_IP 1024
- #endif
- #ifndef ME_STACK_SIZE
- #if ME_COMPILER_HAS_MMU && !VXWORKS
- /*
- If the system supports virtual memory, then stack size should use system default. Only used pages will
- actually consume memory
- */
- #define ME_STACK_SIZE 0 /**< Default thread stack size (0 means use system default) */
- #else
- /*
- No MMU, so the stack size actually consumes memory. Set this as low as possible.
- NOTE: php and ejs use stack heavily.
- */
- #define ME_STACK_SIZE (128 * 1024) /**< Default thread stack size (0 means use system default) */
- #endif
- #endif
- /*********************************** Fixups ***********************************/
- #ifndef ME_INLINE
- #if ME_WIN_LIKE
- #define ME_INLINE __inline
- #else
- #define ME_INLINE inline
- #endif
- #endif
- #if ECOS
- #define LIBKERN_INLINE /* to avoid kernel inline functions */
- #endif /* ECOS */
- #if ME_UNIX_LIKE || VXWORKS || TIDSP
- #define FILE_TEXT ""
- #define FILE_BINARY ""
- #endif
- #if !TIDSP
- #define ME_COMPILER_HAS_MACRO_VARARGS 1
- #else
- #define ME_COMPILER_HAS_MACRO_VARARGS 1
- #endif
- #if ME_UNIX_LIKE
- #define closesocket(x) close(x)
- #if !defined(PTHREAD_MUTEX_RECURSIVE_NP) || FREEBSD
- #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
- #else
- #ifndef PTHREAD_MUTEX_RECURSIVE
- #define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP
- #endif
- #endif
- #endif
- #if !ME_WIN_LIKE && !CYGWIN
- #ifndef O_BINARY
- #define O_BINARY 0
- #endif
- #ifndef O_TEXT
- #define O_TEXT 0
- #endif
- #endif
- #if !LINUX
- #define __WALL 0
- #if !CYGWIN && !defined(MSG_NOSIGNAL)
- #define MSG_NOSIGNAL 0
- #endif
- #endif
- #if ME_BSD_LIKE
- /*
- Fix for MAC OS X - getenv
- */
- #if !HAVE_DECL_ENVIRON
- #ifdef __APPLE__
- #include <crt_externs.h>
- #define environ (*_NSGetEnviron())
- #else
- extern char **environ;
- #endif
- #endif
- #endif
- #if SOLARIS
- #define INADDR_NONE ((in_addr_t) 0xffffffff)
- #endif
- #if VXWORKS
- #ifndef SHUT_RDWR
- #define SHUT_RDWR 2
- #endif
- #define HAVE_SOCKLEN_T
- #if _DIAB_TOOL
- #define inline __inline__
- #define MPR_INLINE __inline__
- #endif
- #ifndef closesocket
- #define closesocket(x) close(x)
- #endif
- #ifndef va_copy
- #define va_copy(d, s) ((d) = (s))
- #endif
- #ifndef strcasecmp
- #define strcasecmp scaselesscmp
- #endif
- #ifndef strncasecmp
- #define strncasecmp sncaselesscmp
- #endif
- #endif
- #if ME_WIN_LIKE
- typedef int uid_t;
- typedef void *handle;
- typedef char *caddr_t;
- typedef long pid_t;
- typedef int gid_t;
- typedef ushort mode_t;
- typedef void *siginfo_t;
- typedef int socklen_t;
- #define HAVE_SOCKLEN_T
- #define MSG_NOSIGNAL 0
- #define FILE_BINARY "b"
- #define FILE_TEXT "t"
- /*
- Error codes
- */
- #define EPERM 1
- #define ENOENT 2
- #define ESRCH 3
- #define EINTR 4
- #define EIO 5
- #define ENXIO 6
- #define E2BIG 7
- #define ENOEXEC 8
- #define EBADF 9
- #define ECHILD 10
- #define EAGAIN 11
- #define ENOMEM 12
- #define EACCES 13
- #define EFAULT 14
- #define EOSERR 15
- #define EBUSY 16
- #define EEXIST 17
- #define EXDEV 18
- #define ENODEV 19
- #define ENOTDIR 20
- #define EISDIR 21
- #define EINVAL 22
- #define ENFILE 23
- #define EMFILE 24
- #define ENOTTY 25
- #define EFBIG 27
- #define ENOSPC 28
- #define ESPIPE 29
- #define EROFS 30
- #define EMLINK 31
- #define EPIPE 32
- #define EDOM 33
- #define ERANGE 34
- #ifndef EWOULDBLOCK
- #define EWOULDBLOCK EAGAIN
- #define EINPROGRESS 36
- #define EALREADY 37
- #define ENETDOWN 43
- #define ECONNRESET 44
- #define ECONNREFUSED 45
- #define EADDRNOTAVAIL 49
- #define EISCONN 56
- #define EADDRINUSE 46
- #define ENETUNREACH 51
- #define ECONNABORTED 53
- #endif
- #ifndef ENOTCONN
- #define ENOTCONN 126
- #endif
- #ifndef EPROTO
- #define EPROTO 134
- #endif
- #undef SHUT_RDWR
- #define SHUT_RDWR 2
- #define TIME_GENESIS UINT64(11644473600000000)
- #ifndef va_copy
- #define va_copy(d, s) ((d) = (s))
- #endif
- #if !WINCE
- #define access _access
- #define chdir _chdir
- #define chmod _chmod
- #define close _close
- #define fileno _fileno
- #define fstat _fstat
- #define getcwd _getcwd
- #define getpid _getpid
- #define gettimezone _gettimezone
- #define lseek _lseek
- #define mkdir(a,b) _mkdir(a)
- #define open _open
- #define putenv _putenv
- #define read _read
- #define rmdir(a) _rmdir(a)
- #define stat _stat
- #define strdup _strdup
- #define tempnam _tempnam
- #define umask _umask
- #define unlink _unlink
- #define write _write
- PUBLIC void sleep(int secs);
- #endif
- #define strcasecmp scaselesscmp
- #define strncasecmp sncaselesscmp
- #pragma comment( lib, "ws2_32.lib" )
- #endif /* WIN_LIKE */
- #if WINCE
- typedef void FILE;
- typedef int off_t;
- #ifndef EOF
- #define EOF -1
- #endif
- #define O_RDONLY 0
- #define O_WRONLY 1
- #define O_RDWR 2
- #define O_NDELAY 0x4
- #define O_NONBLOCK 0x4
- #define O_APPEND 0x8
- #define O_CREAT 0x100
- #define O_TRUNC 0x200
- #define O_TEXT 0x400
- #define O_EXCL 0x800
- #define O_BINARY 0x1000
- /*
- stat flags
- */
- #define S_IFMT 0170000
- #define S_IFDIR 0040000
- #define S_IFCHR 0020000 /* character special */
- #define S_IFIFO 0010000
- #define S_IFREG 0100000
- #define S_IREAD 0000400
- #define S_IWRITE 0000200
- #define S_IEXEC 0000100
- #ifndef S_ISDIR
- #define S_ISDIR(X) (((X) & S_IFMT) == S_IFDIR)
- #endif
- #ifndef S_ISREG
- #define S_ISREG(X) (((X) & S_IFMT) == S_IFREG)
- #endif
- #define STARTF_USESHOWWINDOW 0
- #define STARTF_USESTDHANDLES 0
- #define BUFSIZ ME_BUFSIZE
- #define PATHSIZE ME_MAX_PATH
- #define gethostbyname2(a,b) gethostbyname(a)
- #pragma comment( lib, "ws2.lib" )
- #endif /* WINCE */
- #if TIDSP
- #define EINTR 4
- #define EAGAIN 11
- #define INADDR_NONE 0xFFFFFFFF
- #define PATHSIZE ME_MAX_PATH
- #define NBBY 8
- #define hostent _hostent
- #define NFDBITS ((int) (sizeof(fd_mask) * NBBY))
- typedef long fd_mask;
- typedef int Socklen;
- struct sockaddr_storage { char pad[1024]; };
- #endif /* TIDSP */
- #ifndef NBBY
- #define NBBY 8
- #endif
- /*********************************** Externs **********************************/
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if LINUX
- extern int pthread_mutexattr_gettype (__const pthread_mutexattr_t *__restrict __attr, int *__restrict __kind);
- extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind);
- extern char **environ;
- #endif
- #if VXWORKS
- #if _WRS_VXWORKS_MAJOR < 6 || (_WRS_VXWORKS_MAJOR == 6 && _WRS_VXWORKS_MINOR < 9)
- PUBLIC int gettimeofday(struct timeval *tv, struct timezone *tz);
- #endif
- PUBLIC char *strdup(const char *);
- PUBLIC int sysClkRateGet();
- #if _WRS_VXWORKS_MAJOR < 6
- #define NI_MAXHOST 128
- extern STATUS access(cchar *path, int mode);
- typedef int socklen_t;
- struct sockaddr_storage {
- char pad[1024];
- };
- #else
- /*
- This may or may not be necessary - let us know dev@embedthis.com if your system needs this (and why).
- */
- #if _DIAB_TOOL
- #if ME_CPU_ARCH == ME_CPU_PPC
- #define __va_copy(dest, src) memcpy((dest), (src), sizeof(va_list))
- #endif
- #endif
- #define HAVE_SOCKLEN_T
- #endif
- #endif /* VXWORKS */
- #if ME_WIN_LIKE
- struct timezone {
- int tz_minuteswest; /* minutes W of Greenwich */
- int tz_dsttime; /* type of dst correction */
- };
- PUBLIC int getuid(void);
- PUBLIC int geteuid(void);
- PUBLIC int gettimeofday(struct timeval *tv, struct timezone *tz);
- PUBLIC long lrand48(void);
- PUBLIC long nap(long);
- PUBLIC void srand48(long);
- PUBLIC long ulimit(int, ...);
- #endif
- #if WINCE
- struct stat {
- int st_dev;
- int st_ino;
- ushort st_mode;
- short st_nlink;
- short st_uid;
- short st_gid;
- int st_rdev;
- long st_size;
- time_t st_atime;
- time_t st_mtime;
- time_t st_ctime;
- };
- extern int access(cchar *filename, int flags);
- extern int chdir(cchar dirname);
- extern int chmod(cchar *path, int mode);
- extern int close(int handle);
- extern void exit(int status);
- extern long _get_osfhandle(int handle);
- extern char *getcwd(char* buffer, int maxlen);
- extern char *getenv(cchar *charstuff);
- extern pid_t getpid();
- extern long lseek(int handle, long offset, int origin);
- extern int mkdir(cchar *dir, int mode);
- extern time_t mktime(struct tm *pt);
- extern int _open_osfhandle(int *handle, int flags);
- extern uint open(cchar *file, int mode,...);
- extern int read(int handle, void *buffer, uint count);
- extern int rename(cchar *from, cchar *to);
- extern int rmdir(cchar dir);
- extern uint sleep(uint secs);
- extern int stat(cchar *path, struct stat *stat);
- extern char *strdup(char *s);
- extern int write(int handle, cvoid *buffer, uint count);
- extern int umask(int mode);
- extern int unlink(cchar *path);
- extern int errno;
- #undef CreateFile
- #define CreateFile CreateFileA
- WINBASEAPI HANDLE WINAPI CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
- LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
- HANDLE hTemplateFile);
- #undef CreateProcess
- #define CreateProcess CreateProcessA
- #undef FindFirstFile
- #define FindFirstFile FindFirstFileA
- WINBASEAPI HANDLE WINAPI FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
- #undef FindNextFile
- #define FindNextFile FindNextFileA
- WINBASEAPI BOOL WINAPI FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);
- #undef GetModuleFileName
- #define GetModuleFileName GetModuleFileNameA
- WINBASEAPI DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize);
- #undef GetModuleHandle
- #define GetModuleHandle GetModuleHandleA
- WINBASEAPI HMODULE WINAPI GetModuleHandleA(LPCSTR lpModuleName);
- #undef GetProcAddress
- #define GetProcAddress GetProcAddressA
- #undef GetFileAttributes
- #define GetFileAttributes GetFileAttributesA
- extern DWORD GetFileAttributesA(cchar *path);
- extern void GetSystemTimeAsFileTime(FILETIME *ft);
- #undef LoadLibrary
- #define LoadLibrary LoadLibraryA
- HINSTANCE WINAPI LoadLibraryA(LPCSTR lpLibFileName);
- #define WSAGetLastError GetLastError
- #define _get_timezone getTimezone
- extern int getTimezone(int *secs);
- extern struct tm *localtime_r(const time_t *when, struct tm *tp);
- extern struct tm *gmtime_r(const time_t *t, struct tm *tp);
- #endif /* WINCE */
- #ifdef __cplusplus
- }
- #endif
- #endif /* _h_OSDEP */
- /*
- Copyright (c) Michael O'Brien. All Rights Reserved.
- This is proprietary software and requires a commercial license from the author.
- */
|