/* * Copyright(C) 2006 Cameron Rich * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** * @file os_port.h * * Some stuff to minimise the differences between windows and linux/unix */ #ifndef HEADER_OS_PORT_H #define HEADER_OS_PORT_H #ifdef __cplusplus extern "C" { #endif #include #if defined(WIN32) #define STDCALL __stdcall #define EXP_FUNC __declspec(dllexport) #else #define STDCALL #define EXP_FUNC #endif #if defined(_WIN32_WCE) #undef WIN32 #define WIN32 #endif #ifdef WIN32 /* Windows CE stuff */ #if defined(_WIN32_WCE) #include #define abort() exit(1) #else #include #include #include #include #endif /* _WIN32_WCE */ #include #include #undef getpid #undef open #undef close #undef sleep #undef gettimeofday #undef dup2 #undef unlink #define SOCKET_READ(A,B,C) recv(A,B,C,0) #define SOCKET_WRITE(A,B,C) send(A,B,C,0) #define SOCKET_CLOSE(A) closesocket(A) #define srandom(A) srand(A) #define random() rand() #define getpid() _getpid() #define snprintf _snprintf #define open(A,B) _open(A,B) #define dup2(A,B) _dup2(A,B) #define unlink(A) _unlink(A) #define close(A) _close(A) #define read(A,B,C) _read(A,B,C) #define write(A,B,C) _write(A,B,C) #define sleep(A) Sleep(A*1000) #define usleep(A) Sleep(A/1000) #define strdup(A) _strdup(A) #define chroot(A) _chdir(A) #ifndef lseek #define lseek(A,B,C) _lseek(A,B,C) #endif /* This fix gets around a problem where a win32 application on a cygwin xterm doesn't display regular output (until a certain buffer limit) - but it works fine under a normal DOS window. This is a hack to get around the issue - see http://www.khngai.com/emacs/tty.php */ #define TTY_FLUSH() if (!_isatty(_fileno(stdout))) fflush(stdout); /* * automatically build some library dependencies. */ #pragma comment(lib, "WS2_32.lib") #ifdef CONFIG_WIN32_USE_CRYPTO_LIB #pragma comment(lib, "AdvAPI32.lib") #endif typedef UINT8 uint8_t; typedef INT8 int8_t; typedef UINT16 uint16_t; typedef INT16 int16_t; typedef UINT32 uint32_t; typedef INT32 int32_t; typedef UINT64 uint64_t; typedef INT64 int64_t; EXP_FUNC void STDCALL gettimeofday(struct timeval* t,void* timezone); EXP_FUNC int STDCALL strcasecmp(const char *s1, const char *s2); #else /* Not Win32 */ #ifdef CONFIG_PLATFORM_SOLARIS #include #else #include #endif /* Not Solaris */ #include #include #include #include #include #include #include #include #include #include #include #define SOCKET_READ(A,B,C) read(A,B,C) #define SOCKET_WRITE(A,B,C) write(A,B,C) #define SOCKET_CLOSE(A) close(A) #define TTY_FLUSH() #endif /* Not Win32 */ /* some functions to mutate the way these work */ #define malloc(A) ax_malloc(A) #define realloc(A,B) ax_realloc(A,B) #define calloc(A,B) ax_calloc(A,B) EXP_FUNC void * STDCALL ax_malloc(size_t s); EXP_FUNC void * STDCALL ax_realloc(void *y, size_t s); EXP_FUNC void * STDCALL ax_calloc(size_t n, size_t s); EXP_FUNC FILE * STDCALL ax_fopen(const char *name, const char *type); EXP_FUNC int STDCALL ax_open(const char *pathname, int flags); #ifdef CONFIG_PLATFORM_LINUX void exit_now(const char *format, ...) __attribute((noreturn)); #else void exit_now(const char *format, ...); #endif #ifdef __cplusplus } #endif #endif