/*! \file os.h The intent of this header file is to put operating system and compiler specific portability changes in one place. \author Jon A. Lambert \date 12/12/2005 \version 0.4 \remarks This source code copyright (C) 2004,2005 by Jon A. Lambert All rights reserved. */ #ifndef OS_H #define OS_H /*-----------------------------------------------------------------------*/ /* COMMON DEFINITIONS SECTION */ /*-----------------------------------------------------------------------*/ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <stdarg.h> #include <signal.h> #include <time.h> /* Gentoo complains */ #include <sys/types.h> #include <limits.h> #include <fcntl.h> #include <assert.h> #include <sys/stat.h> /*-----------------------------------------------------------------------*/ /* WINDOWS DEFINITIONS SECTION */ /*-----------------------------------------------------------------------*/ #ifdef WIN32 /* Windows portability */ #define ARG_MAX (16384 - 256) #define FD_SETSIZE 1024 #define NOFILE FD_SETSIZE #include <windows.h> #include <winsock2.h> #include <process.h> #if defined __LCC__ || defined _MSC_VER #include <direct.h> #else #include <dirent.h> #endif #if defined __BORLANDC__ //#include <dir.h> #endif #undef EWOULDBLOCK #undef EADDRINUSE #undef ETIMEDOUT #undef ECONNRESET #undef EMSGSIZE #undef EHOSTUNREACH #undef ENETUNREACH #undef EINPROGRESS #define EWOULDBLOCK WSAEWOULDBLOCK #define EADDRINUSE WSAEADDRINUSE #define ETIMEDOUT WSAETIMEDOUT #define ECONNRESET WSAECONNRESET #define EMSGSIZE WSAEMSGSIZE #define EHOSTUNREACH WSAEHOSTUNREACH #define ENETUNREACH WSAENETRESET #define EINPROGRESS WSAEINPROGRESS #undef EPIPE #undef EINVAL #define EPIPE WSAENOTCONN #define EINVAL WSAEINVAL #undef ECONNREFUSED #define ECONNREFUSED WSAECONNABORTED #undef EINTR #undef EMFILE #define EINTR WSAEINTR #define EMFILE WSAEMFILE #define GETERROR WSAGetLastError() #define WIN32STARTUP \ { \ WSADATA wsaData; \ int err = WSAStartup(0x202,&wsaData); \ if (err) \ fprintf(stderr,"Error(WSAStartup):%d\n",err); \ } #define WIN32CLEANUP WSACleanup(); #define close(X) closesocket(X) #define index(s, c) strchr((s), (c)) #define bcopy(s, d, n) memcpy((d), (s), (n)) #define bzero(s, n) memset((s), 0, (n)) #define getdtablesize() FD_SETSIZE #define RAND rand #define SRAND srand #if defined _MSC_VER #define stat _stat #define mkdir _mkdir #define mktemp _mktemp #define chdir _chdir #define fstat _fstat #define isatty _isatty #define fileno _fileno #define unlink _unlink #define strcasecmp(s1, s2) _stricmp((s1), (s2)) #define strncasecmp(s1, s2, s3) _strnicmp((s1), (s2), (s3)) #else #define strcasecmp(s1, s2) stricmp((s1), (s2)) #define strncasecmp(s1, s2, s3) strncmpi((s1), (s2), (s3)) #endif #define popen _popen #define pclose _pclose /* defined in os.c */ #ifndef __LCC__ /* simply does not like our prototype ? */ void gettimeofday (struct timeval *tp, struct timezone *tzp); #endif extern char *crypt(const char *pw, const char *salt); #define FGETS fgets_win extern char *fgets_win (char *buf, int n, FILE * fp); /*-----------------------------------------------------------------------*/ /* UNIX DEFINITION SECTION */ /*-----------------------------------------------------------------------*/ #else /* Unix portability - some a consequence of above */ #include <sys/time.h> /* Redhat BSD need this */ #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <sys/param.h> #include <sys/resource.h> #include <sys/wait.h> #ifndef __FreeBSD__ #include <crypt.h> #endif #include <dirent.h> #define GETERROR errno #define INVALID_SOCKET -1 /* 0 on Windows */ #define SOCKET_ERROR -1 #define SOCKET int #define WIN32STARTUP #define WIN32CLEANUP #define RAND random #define SRAND srandom #define FGETS fgets #ifndef O_BINARY #define O_BINARY 0 #endif #endif /*-----------------------------------------------------------------------*/ /* COMMON DEFINITION SECTION */ /*-----------------------------------------------------------------------*/ #if defined _POSIX_ARG_MAX #define MAXCMDLEN _POSIX_ARG_MAX #elif defined ARG_MAX #define MAXCMDLEN ARG_MAX #elif defined NCARGS #define MAXCMDLEN NCARGS #else #error Cannot determine maximum command argument size #endif #ifndef MAXPATHLEN #ifdef MAXPATH #define MAXPATHLEN MAXPATH #else #define MAXPATHLEN 260 #endif #endif #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN MAXGETHOSTSTRUCT #endif #if !defined NOFILE #if defined OPEN_MAX #define NOFILE OPEN_MAX #else #error Cannot determine maximum open files #endif #endif #endif /* OS_H */