/// /// @file mprOs.h /// @brief Include O/S headers and smooth out per-O/S differences // @copy default // // Copyright (c) Mbedthis Software LLC, 2003-2005. All Rights Reserved. // // This software is distributed under commercial and open source licenses. // You may use the GPL open source license described below or you may acquire // a commercial license from Mbedthis Software. You agree to be fully bound // by the terms of either license. Consult the LICENSE.TXT distributed with // this software for full details. // // This software is open source; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation; either version 2 of the License, or (at your // option) any later version. See the GNU General Public License for more // details at: http://www.mbedthis.com/downloads/gplLicense.html // // This program is distributed WITHOUT ANY WARRANTY; without even the // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // // This GPL license does NOT permit incorporating this software into // proprietary programs. If you are unable to comply with the GPL, you must // acquire a commercial license to use this software. Commercial licenses // for this software and support services are available from Mbedthis // Software at http://www.mbedthis.com // // @end //////////////////////////////// Documentation ///////////////////////////////// /// /// This header is part of the Mbedthis Portable Runtime and aims to include /// all necessary O/S headers and to unify the constants and declarations /// required by Mbedthis products. It can be included by C or C++ programs. /// //////////////////////////////////////////////////////////////////////////////// #error foo blah blah; #ifndef _h_MPR_OS_HDRS #define _h_MPR_OS_HDRS 1 #include "web_server/ejs/config.h" ////////////////////////////////// CPU Families //////////////////////////////// // // Porters, add your CPU families here and update configure code. // #define MPR_CPU_UNKNOWN 0 #define MPR_CPU_IX86 1 #define MPR_CPU_PPC 2 #define MPR_CPU_SPARC 3 #define MPR_CPU_XSCALE 4 #define MPR_CPU_ARM 5 #define MPR_CPU_MIPS 6 #define MPR_CPU_68K 7 #define MPR_CPU_SIMNT 8 // VxWorks NT simulator #define MPR_CPU_SIMSPARC 9 // VxWorks sparc simulator ////////////////////////////////// O/S Includes //////////////////////////////// #if LINUX || SOLARIS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if LINUX #include #endif #if SOLARIS #include #endif #if BLD_FEATURE_FLOATING_POINT #define __USE_ISOC99 1 #include #include #endif #endif // LINUX || SOLARIS #if VXWORKS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if BLD_FEATURE_FLOATING_POINT #include #define __USE_ISOC99 1 #include #endif #include #include #include #include #include #include #include #include #endif // VXWORKS #if MACOSX #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif // MACOSX #if WIN #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define WIN32_LEAN_AND_MEAN #include #include #include #if BLD_FEATURE_FLOATING_POINT #include #endif #include #include #include #endif // WIN #ifdef __cplusplus extern "C" { #endif //////////////////////////////////////////////////////////////////////////////// //////////////////////////////// General Defines /////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #define MAXINT INT_MAX #define BITS(type) (BITSPERBYTE * (int) sizeof(type)) #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif // // Set FD_SETSIZE to the maximum number of files (sockets) that you want to // support. It is used in select.cpp. // // #ifdef FD_SETSIZE // #undef FD_SETSIZE // #endif // #define FD_SETSIZE 128 // typedef char *MprStr; // Used for dynamic strings //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// Linux Defines //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #if LINUX typedef unsigned char uchar; #if BLD_FEATURE_INT64 __extension__ typedef long long int int64; __extension__ typedef unsigned long long int uint64; #define INT64(x) (x##LL) #endif #define closesocket(x) close(x) #define MPR_BINARY "" #define MPR_TEXT "" #define O_BINARY 0 #define O_TEXT 0 #define SOCKET_ERROR -1 #define MPR_DLL_EXT ".so" #if BLD_FEATURE_FLOATING_POINT #define MAX_FLOAT MAXFLOAT #endif #if BLD_FEATURE_MALLOC // // PORTERS: You will need add assembler code for your architecture here // only if you want to use the fast malloc (BLD_FEATURE_MALLOC) // #if UNUSED #define MPR_GET_RETURN(ip) __builtin_return_address(0) #else #if BLD_HOST_CPU_ARCH == MPR_CPU_IX86 #define MPR_GET_RETURN(ip) \ asm("movl 4(%%ebp),%%eax ; movl %%eax,%0" : \ "=g" (ip) : \ : "eax") #endif #endif // UNUSED #endif // BLD_FEATURE_MALLOC #if FUTURE // #define mprGetHiResTime(x) __asm__ __volatile__ ("rdtsc" : "=A" (x)) // extern char *inet_ntoa_r(const struct in_addr in, char *buffer, int buflen); // // Atomic functions // typedef struct { volatile int counter; } mprAtomic_t; #if BLD_FEATURE_MULTITHREAD #define LOCK "lock ; " #else #define LOCK "" #endif static __inline__ void mprAtomicInc(mprAtomic_t* v) { __asm__ __volatile__( LOCK "incl %0" :"=m" (v->counter) :"m" (v->counter)); } static __inline__ void mprAtomicDec(mprAtomic_t* v) { __asm__ __volatile__( LOCK "decl %0" :"=m" (v->counter) :"m" (v->counter)); } #endif // FUTURE #endif // LINUX //////////////////////////////////////////////////////////////////////////////// //////////////////////////////// VxWorks Defines /////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #if VXWORKS typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong; #define HAVE_SOCKLEN_T typedef int socklen_t; #if BLD_FEATURE_INT64 typedef long long int int64; typedef unsigned long long int uint64; #define INT64(x) (x##LL) #endif #define closesocket(x) close(x) #define getpid() taskIdSelf() #define MPR_BINARY "" #define MPR_TEXT "" #define O_BINARY 0 #define O_TEXT 0 #define SOCKET_ERROR -1 #define MPR_DLL_EXT ".so" #if BLD_FEATURE_FLOATING_POINT #define MAX_FLOAT FLT_MAX #endif #undef R_OK #define R_OK 4 #undef W_OK #define W_OK 2 #undef X_OK #define X_OK 1 #undef F_OK #define F_OK 0 #define MSG_NOSIGNAL 0 extern int access(char *path, int mode); extern int sysClkRateGet(); #if BLD_FEATURE_MALLOC // // PORTERS: You will need add assembler code for your architecture here // only if you want to use the fast malloc (BLD_FEATURE_MALLOC) // #if UNUSED #define MPR_GET_RETURN(ip) __builtin_return_address(0) #else #if BLD_HOST_CPU_ARCH == MPR_CPU_IX86 #define MPR_GET_RETURN(ip) \ asm("movl 4(%%ebp),%%eax ; movl %%eax,%0" : \ "=g" (ip) : \ : "eax") #endif #endif // UNUSED #endif // BLD_FEATURE_MALLOC #endif // VXWORKS //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// MacOsx Defines /////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #if MACOSX typedef unsigned long ulong; typedef unsigned char uchar; #if BLD_FEATURE_INT64 __extension__ typedef long long int int64; __extension__ typedef unsigned long long int uint64; #define INT64(x) (x##LL) #endif #define closesocket(x) close(x) #define MPR_BINARY "" #define MPR_TEXT "" #define O_BINARY 0 #define O_TEXT 0 #define SOCKET_ERROR -1 #define MPR_DLL_EXT ".dylib" #define MSG_NOSIGNAL 0 #define __WALL 0x40000000 #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE #if BLD_FEATURE_FLOATING_POINT #define MAX_FLOAT MAXFLOAT #endif #if MPR_FEATURE_MALLOC // // PORTERS: You will need add assembler code for your architecture here // only if you want to use the fast malloc (MPR_FEATURE_MALLOC) // #define MPR_GET_RETURN(ip) __builtin_return_address #endif #if FUTURE // #define mprGetHiResTime(x) __asm__ __volatile__ ("rdtsc" : "=A" (x)) // extern char *inet_ntoa_r(const struct in_addr in, char *buffer, int buflen); // // Atomic functions // typedef struct { volatile int counter; } mprAtomic_t; #if MPR_FEATURE_MULTITHREAD #define LOCK "lock ; " #else #define LOCK "" #endif static __inline__ void mprAtomicInc(mprAtomic_t* v) { __asm__ __volatile__( LOCK "incl %0" :"=m" (v->counter) :"m" (v->counter)); } static __inline__ void mprAtomicDec(mprAtomic_t* v) { __asm__ __volatile__( LOCK "decl %0" :"=m" (v->counter) :"m" (v->counter)); } #endif #endif // MACOSX //////////////////////////////////////////////////////////////////////////////// //////////////////////////////// Windows Defines /////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #if WIN typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong; typedef unsigned short ushort; #if BLD_FEATURE_INT64 typedef __int64 int64; typedef unsigned __int64 uint64; #define INT64(x) (x##i64) #endif 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; #define HAVE_SOCKLEN_T typedef int socklen_t; #undef R_OK #define R_OK 4 #undef W_OK #define W_OK 2 #undef X_OK #define X_OK 1 #undef F_OK #define F_OK 0 #ifndef EADDRINUSE #define EADDRINUSE 46 #endif #ifndef EWOULDBLOCK #define EWOULDBLOCK EAGAIN #endif #ifndef ENETDOWN #define ENETDOWN 43 #endif #ifndef ECONNRESET #define ECONNRESET 44 #endif #ifndef ECONNREFUSED #define ECONNREFUSED 45 #endif #define MSG_NOSIGNAL 0 #define MPR_BINARY "b" #define MPR_TEXT "t" #if BLD_FEATURE_FLOATING_POINT #define MAX_FLOAT DBL_MAX #endif #ifndef FILE_FLAG_FIRST_PIPE_INSTANCE #define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000 #endif #define access _access #define close _close #define fileno _fileno #define fstat _fstat #define getpid _getpid #define open _open #define putenv _putenv #define read _read #define stat _stat #define umask _umask #define unlink _unlink #define write _write #define strdup _strdup #define lseek _lseek #define mkdir(a,b) _mkdir(a) #define rmdir(a) _rmdir(a) #if BLD_FEATURE_MALLOC // // PORTERS: You will need add assembler code for your architecture here // only if you want to use the fast malloc (BLD_FEATURE_MALLOC) // #if MPR_CPU_IX86 #define MPR_GET_RETURN(ip) \ __asm { mov eax, 4[ebp] } \ __asm { mov ip, eax } #endif #endif #define MPR_DLL_EXT ".dll" extern void srand48(long); extern long lrand48(void); extern long ulimit(int, ...); extern long nap(long); extern uint sleep(unsigned int secs); extern uid_t getuid(void); extern uid_t geteuid(void); #endif // WIN //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Solaris Defines //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #if SOLARIS typedef unsigned char uchar; #if BLD_FEATURE_INT64 typedef long long int int64; typedef unsigned long long int uint64; #define INT64(x) (x##LL) #endif #define closesocket(x) close(x) #define MPR_BINARY "" #define MPR_TEXT "" #define O_BINARY 0 #define O_TEXT 0 #define SOCKET_ERROR -1 #define MPR_DLL_EXT ".so" #define MSG_NOSIGNAL 0 #define INADDR_NONE ((in_addr_t) 0xffffffff) #define __WALL 0 #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE #if BLD_FEATURE_FLOATING_POINT #define MAX_FLOAT MAXFLOAT #endif #endif // SOLARIS //////////////////////////////////////////////////////////////////////////////// #ifdef __cplusplus } #endif #endif // _h_MPR_OS_HDRS // // Local variables: // tab-width: 4 // c-basic-offset: 4 // End: // vim:tw=78 // vim600: sw=4 ts=4 fdm=marker // vim<600: sw=4 ts=4 //