/** 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 definitions 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 #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 #endif #if ME_WIN_LIKE #include #include #include #include #include #include #include #include #include #include #include #include #if _MSC_VER >= 1800 #include #endif #if ME_DEBUG #include #endif #endif /* Includes in alphabetic order */ #include #if ME_WIN_LIKE #include #else #include #endif #if ME_UNIX_LIKE #include #endif #include #include #if ME_FLOAT #include #define __USE_ISOC99 1 #include #endif #if ME_UNIX_LIKE #include #endif #if ME_WIN_LIKE #include #endif #if MACOSX || LINUX #include #endif #include #if ME_UNIX_LIKE || VXWORKS #include #include #include #include #include #include #include #endif #if ME_UNIX_LIKE #include #include #if !CYGWIN #include #endif #endif #if ME_BSD_LIKE #include #endif #include #include #include #if ME_UNIX_LIKE #include #endif #include #include #include #if ME_UNIX_LIKE #include #endif #if !TIDSP #include #include #endif #if ME_UNIX_LIKE #include #include #include #include #include #include #include #include #include #include #include #endif #include #if !VXWORKS && !TIDSP #include #endif /* Extra includes per O/S */ #if CYGWIN #include "w32api/windows.h" #include "sys/cygwin.h" #endif #if LINUX #include #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) #include #endif #include #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) #include #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13) #define HAS_INOTIFY 1 #include #else #define HAS_INOTIFY 0 #endif #if !__UCLIBC__ #include #endif #endif #if MACOSX #include #include #include #include #include #include #include #include #endif #if VXWORKS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if _WRS_VXWORKS_MAJOR >= 6 #include #endif #if _WRS_VXWORKS_MAJOR > 6 || (_WRS_VXWORKS_MAJOR == 6 && _WRS_VXWORKS_MINOR >= 8) #include #include #endif #endif #if TIDSP #include #include #include #include #include #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 #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 #define ME_DEPRECATE(MSG) __attribute__ ((deprecated(MSG))) #else #define ME_DEPRECATE(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) #ifndef PTHREAD_MUTEX_RECURSIVE_NP #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE #endif #ifndef PTHREAD_MUTEX_RECURSIVE #define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP #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 MACOSX /* Fix for MAC OS X - getenv */ #if !HAVE_DECL_ENVIRON #ifdef __APPLE__ #include #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. */