1ea906c41SOllivier Robert /* -*- Mode: C -*- */ 2ea906c41SOllivier Robert 3ea906c41SOllivier Robert /* --- fake the preprocessor into handlng portability */ 4ea906c41SOllivier Robert /* 5ea906c41SOllivier Robert * Time-stamp: "2007-02-03 17:41:06 bkorb" 6ea906c41SOllivier Robert * 7ea906c41SOllivier Robert * Author: Gary V Vaughan <gvaughan@oranda.demon.co.uk> 8ea906c41SOllivier Robert * Created: Mon Jun 30 15:54:46 1997 9ea906c41SOllivier Robert * 10ea906c41SOllivier Robert * $Id: compat.h,v 4.16 2007/04/27 01:10:47 bkorb Exp $ 11ea906c41SOllivier Robert */ 12ea906c41SOllivier Robert #ifndef COMPAT_H_GUARD 13ea906c41SOllivier Robert #define COMPAT_H_GUARD 1 14ea906c41SOllivier Robert 15ea906c41SOllivier Robert #if defined(HAVE_CONFIG_H) 16ea906c41SOllivier Robert # include <config.h> 17ea906c41SOllivier Robert 18ea906c41SOllivier Robert #elif defined(_WIN32) && !defined(__CYGWIN__) 19ea906c41SOllivier Robert # include "windows-config.h" 20ea906c41SOllivier Robert 21ea906c41SOllivier Robert #else 22ea906c41SOllivier Robert # error "compat.h" requires "config.h" 23ea906c41SOllivier Robert choke me. 24ea906c41SOllivier Robert #endif 25ea906c41SOllivier Robert 26ea906c41SOllivier Robert 27ea906c41SOllivier Robert #ifndef HAVE_STRSIGNAL 28ea906c41SOllivier Robert char * strsignal( int signo ); 29ea906c41SOllivier Robert #endif 30ea906c41SOllivier Robert 31ea906c41SOllivier Robert #define _GNU_SOURCE 1 /* for strsignal in GNU's libc */ 32ea906c41SOllivier Robert #define __USE_GNU 1 /* exact same thing as above */ 33ea906c41SOllivier Robert #define __EXTENSIONS__ 1 /* and another way to call for it */ 34ea906c41SOllivier Robert 35ea906c41SOllivier Robert /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 36ea906c41SOllivier Robert * 37ea906c41SOllivier Robert * SYSTEM HEADERS: 38ea906c41SOllivier Robert */ 39ea906c41SOllivier Robert #include <sys/types.h> 40ea906c41SOllivier Robert #ifdef HAVE_SYS_MMAN_H 41ea906c41SOllivier Robert # include <sys/mman.h> 42ea906c41SOllivier Robert #endif 43ea906c41SOllivier Robert #include <sys/param.h> 44ea906c41SOllivier Robert #if HAVE_SYS_PROCSET_H 45ea906c41SOllivier Robert # include <sys/procset.h> 46ea906c41SOllivier Robert #endif 47ea906c41SOllivier Robert #include <sys/stat.h> 48ea906c41SOllivier Robert #include <sys/wait.h> 49ea906c41SOllivier Robert 50ea906c41SOllivier Robert #if defined( HAVE_SOLARIS_SYSINFO ) 51ea906c41SOllivier Robert # include <sys/systeminfo.h> 52ea906c41SOllivier Robert #elif defined( HAVE_UNAME_SYSCALL ) 53ea906c41SOllivier Robert # include <sys/utsname.h> 54ea906c41SOllivier Robert #endif 55ea906c41SOllivier Robert 56ea906c41SOllivier Robert #ifdef DAEMON_ENABLED 57ea906c41SOllivier Robert # if HAVE_SYS_STROPTS_H 58ea906c41SOllivier Robert # include <sys/stropts.h> 59ea906c41SOllivier Robert # endif 60ea906c41SOllivier Robert 61ea906c41SOllivier Robert # if HAVE_SYS_SOCKET_H 62ea906c41SOllivier Robert # include <sys/socket.h> 63ea906c41SOllivier Robert # endif 64ea906c41SOllivier Robert 65ea906c41SOllivier Robert # if ! defined(HAVE_SYS_POLL_H) && ! defined(HAVE_SYS_SELECT_H) 66ea906c41SOllivier Robert # error This system cannot support daemon processing 67ea906c41SOllivier Robert Choke Me. 68ea906c41SOllivier Robert # endif 69ea906c41SOllivier Robert 70ea906c41SOllivier Robert # if HAVE_SYS_POLL_H 71ea906c41SOllivier Robert # include <sys/poll.h> 72ea906c41SOllivier Robert # endif 73ea906c41SOllivier Robert 74ea906c41SOllivier Robert # if HAVE_SYS_SELECT_H 75ea906c41SOllivier Robert # include <sys/select.h> 76ea906c41SOllivier Robert # endif 77ea906c41SOllivier Robert 78ea906c41SOllivier Robert # if HAVE_NETINET_IN_H 79ea906c41SOllivier Robert # include <netinet/in.h> 80ea906c41SOllivier Robert # endif 81ea906c41SOllivier Robert 82ea906c41SOllivier Robert # if HAVE_SYS_UN_H 83ea906c41SOllivier Robert # include <sys/un.h> 84ea906c41SOllivier Robert # endif 85ea906c41SOllivier Robert #endif 86ea906c41SOllivier Robert 87ea906c41SOllivier Robert /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 88ea906c41SOllivier Robert * 89ea906c41SOllivier Robert * USER HEADERS: 90ea906c41SOllivier Robert */ 91ea906c41SOllivier Robert #include <stdio.h> 92ea906c41SOllivier Robert #include <assert.h> 93ea906c41SOllivier Robert #include <ctype.h> 94ea906c41SOllivier Robert 95ea906c41SOllivier Robert /* 96ea906c41SOllivier Robert * Directory opening stuff: 97ea906c41SOllivier Robert */ 98ea906c41SOllivier Robert # if defined (_POSIX_SOURCE) 99ea906c41SOllivier Robert /* Posix does not require that the d_ino field be present, and some 100ea906c41SOllivier Robert systems do not provide it. */ 101ea906c41SOllivier Robert # define REAL_DIR_ENTRY(dp) 1 102ea906c41SOllivier Robert # else /* !_POSIX_SOURCE */ 103ea906c41SOllivier Robert # define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) 104ea906c41SOllivier Robert # endif /* !_POSIX_SOURCE */ 105ea906c41SOllivier Robert 106ea906c41SOllivier Robert # if defined (HAVE_DIRENT_H) 107ea906c41SOllivier Robert # include <dirent.h> 108ea906c41SOllivier Robert # define D_NAMLEN(dirent) strlen((dirent)->d_name) 109ea906c41SOllivier Robert # else /* !HAVE_DIRENT_H */ 110ea906c41SOllivier Robert # define dirent direct 111ea906c41SOllivier Robert # define D_NAMLEN(dirent) (dirent)->d_namlen 112ea906c41SOllivier Robert # if defined (HAVE_SYS_NDIR_H) 113ea906c41SOllivier Robert # include <sys/ndir.h> 114ea906c41SOllivier Robert # endif /* HAVE_SYS_NDIR_H */ 115ea906c41SOllivier Robert # if defined (HAVE_SYS_DIR_H) 116ea906c41SOllivier Robert # include <sys/dir.h> 117ea906c41SOllivier Robert # endif /* HAVE_SYS_DIR_H */ 118ea906c41SOllivier Robert # if defined (HAVE_NDIR_H) 119ea906c41SOllivier Robert # include <ndir.h> 120ea906c41SOllivier Robert # endif /* HAVE_NDIR_H */ 121ea906c41SOllivier Robert # endif /* !HAVE_DIRENT_H */ 122ea906c41SOllivier Robert 123ea906c41SOllivier Robert #include <errno.h> 124ea906c41SOllivier Robert #ifdef HAVE_FCNTL_H 125ea906c41SOllivier Robert # include <fcntl.h> 126ea906c41SOllivier Robert #endif 127ea906c41SOllivier Robert #ifndef O_NONBLOCK 128ea906c41SOllivier Robert # define O_NONBLOCK FNDELAY 129ea906c41SOllivier Robert #endif 130ea906c41SOllivier Robert 131ea906c41SOllivier Robert #if defined(HAVE_LIBGEN) && defined(HAVE_LIBGEN_H) 132ea906c41SOllivier Robert # include <libgen.h> 133ea906c41SOllivier Robert #endif 134ea906c41SOllivier Robert 135ea906c41SOllivier Robert #if defined(HAVE_LIMITS_H) /* this is also in options.h */ 136ea906c41SOllivier Robert # include <limits.h> 137ea906c41SOllivier Robert #elif defined(HAVE_SYS_LIMITS_H) 138ea906c41SOllivier Robert # include <sys/limits.h> 139ea906c41SOllivier Robert #endif /* HAVE_LIMITS/SYS_LIMITS_H */ 140ea906c41SOllivier Robert 141ea906c41SOllivier Robert #include <memory.h> 142ea906c41SOllivier Robert #include <setjmp.h> 143ea906c41SOllivier Robert #include <signal.h> 144ea906c41SOllivier Robert 145ea906c41SOllivier Robert #if defined( HAVE_STDINT_H ) 146ea906c41SOllivier Robert # include <stdint.h> 147ea906c41SOllivier Robert #elif defined( HAVE_INTTYPES_H ) 148ea906c41SOllivier Robert # include <inttypes.h> 149ea906c41SOllivier Robert #endif 150ea906c41SOllivier Robert 151ea906c41SOllivier Robert #include <stdlib.h> 152ea906c41SOllivier Robert #include <string.h> 153ea906c41SOllivier Robert 154ea906c41SOllivier Robert #include <time.h> 155ea906c41SOllivier Robert 156ea906c41SOllivier Robert #ifdef HAVE_UTIME_H 157ea906c41SOllivier Robert # include <utime.h> 158ea906c41SOllivier Robert #endif 159ea906c41SOllivier Robert 160ea906c41SOllivier Robert #ifdef HAVE_UNISTD_H 161ea906c41SOllivier Robert # include <unistd.h> 162ea906c41SOllivier Robert #endif 163ea906c41SOllivier Robert 164ea906c41SOllivier Robert /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 165ea906c41SOllivier Robert * 166ea906c41SOllivier Robert * FIXUPS and CONVIENCE STUFF: 167ea906c41SOllivier Robert */ 168ea906c41SOllivier Robert #ifdef __cplusplus 169ea906c41SOllivier Robert # define EXTERN extern "C" 170ea906c41SOllivier Robert #else 171ea906c41SOllivier Robert # define EXTERN extern 172ea906c41SOllivier Robert #endif 173ea906c41SOllivier Robert 174ea906c41SOllivier Robert /* some systems #def errno! and others do not declare it!! */ 175ea906c41SOllivier Robert #ifndef errno 176ea906c41SOllivier Robert extern int errno; 177ea906c41SOllivier Robert #endif 178ea906c41SOllivier Robert 179ea906c41SOllivier Robert /* Some machines forget this! */ 180ea906c41SOllivier Robert 181ea906c41SOllivier Robert # ifndef EXIT_FAILURE 182ea906c41SOllivier Robert # define EXIT_SUCCESS 0 183ea906c41SOllivier Robert # define EXIT_FAILURE 1 184ea906c41SOllivier Robert # endif 185ea906c41SOllivier Robert 186ea906c41SOllivier Robert #ifndef NUL 187ea906c41SOllivier Robert # define NUL '\0' 188ea906c41SOllivier Robert #endif 189ea906c41SOllivier Robert 190ea906c41SOllivier Robert #ifndef NULL 191ea906c41SOllivier Robert # define NULL 0 192ea906c41SOllivier Robert #endif 193ea906c41SOllivier Robert 194ea906c41SOllivier Robert #if !defined (MAXPATHLEN) && defined (HAVE_SYS_PARAM_H) 195ea906c41SOllivier Robert # include <sys/param.h> 196ea906c41SOllivier Robert #endif /* !MAXPATHLEN && HAVE_SYS_PARAM_H */ 197ea906c41SOllivier Robert 198ea906c41SOllivier Robert #if !defined (MAXPATHLEN) && defined (PATH_MAX) 199ea906c41SOllivier Robert # define MAXPATHLEN PATH_MAX 200ea906c41SOllivier Robert #endif /* !MAXPATHLEN && PATH_MAX */ 201ea906c41SOllivier Robert 202ea906c41SOllivier Robert #if !defined (MAXPATHLEN) && defined(_MAX_PATH) 203ea906c41SOllivier Robert # define PATH_MAX _MAX_PATH 204ea906c41SOllivier Robert # define MAXPATHLEN _MAX_PATH 205ea906c41SOllivier Robert #endif 206ea906c41SOllivier Robert 207ea906c41SOllivier Robert #if !defined (MAXPATHLEN) 208ea906c41SOllivier Robert # define MAXPATHLEN ((size_t)4096) 209ea906c41SOllivier Robert #endif /* MAXPATHLEN */ 210ea906c41SOllivier Robert 211ea906c41SOllivier Robert #define AG_PATH_MAX ((size_t)MAXPATHLEN) 212ea906c41SOllivier Robert 213ea906c41SOllivier Robert #ifndef LONG_MAX 214ea906c41SOllivier Robert # define LONG_MAX ~(1L << (8*sizeof(long) -1)) 215ea906c41SOllivier Robert # define INT_MAX ~(1 << (8*sizeof(int) -1)) 216ea906c41SOllivier Robert #endif 217ea906c41SOllivier Robert 218ea906c41SOllivier Robert #ifndef ULONG_MAX 219ea906c41SOllivier Robert # define ULONG_MAX ~(OUL) 220ea906c41SOllivier Robert # define UINT_MAX ~(OU) 221ea906c41SOllivier Robert #endif 222ea906c41SOllivier Robert 223ea906c41SOllivier Robert #ifndef SHORT_MAX 224ea906c41SOllivier Robert # define SHORT_MAX ~(1 << (8*sizeof(short) -1)) 225ea906c41SOllivier Robert #else 226ea906c41SOllivier Robert # define USHORT_MAX ~(OUS) 227ea906c41SOllivier Robert #endif 228ea906c41SOllivier Robert 229ea906c41SOllivier Robert #ifndef HAVE_INT8_T 230ea906c41SOllivier Robert typedef signed char int8_t; 231ea906c41SOllivier Robert #endif 232ea906c41SOllivier Robert #ifndef HAVE_UINT8_T 233ea906c41SOllivier Robert typedef unsigned char uint8_t; 234ea906c41SOllivier Robert #endif 235ea906c41SOllivier Robert #ifndef HAVE_INT16_T 236ea906c41SOllivier Robert typedef signed short int16_t; 237ea906c41SOllivier Robert #endif 238ea906c41SOllivier Robert #ifndef HAVE_UINT16_T 239ea906c41SOllivier Robert typedef unsigned short uint16_t; 240ea906c41SOllivier Robert #endif 241ea906c41SOllivier Robert #ifndef HAVE_UINT_T 242ea906c41SOllivier Robert typedef unsigned int uint_t; 243ea906c41SOllivier Robert #endif 244ea906c41SOllivier Robert 245ea906c41SOllivier Robert #ifndef HAVE_INT32_T 246ea906c41SOllivier Robert # if SIZEOF_INT == 4 247ea906c41SOllivier Robert typedef signed int int32_t; 248ea906c41SOllivier Robert # elif SIZEOF_LONG == 4 249ea906c41SOllivier Robert typedef signed long int32_t; 250ea906c41SOllivier Robert # endif 251ea906c41SOllivier Robert #endif 252ea906c41SOllivier Robert 253ea906c41SOllivier Robert #ifndef HAVE_UINT32_T 254ea906c41SOllivier Robert # if SIZEOF_INT == 4 255ea906c41SOllivier Robert typedef unsigned int uint32_t; 256ea906c41SOllivier Robert # elif SIZEOF_LONG == 4 257ea906c41SOllivier Robert typedef unsigned long uint32_t; 258ea906c41SOllivier Robert # else 259ea906c41SOllivier Robert # error Cannot create a uint32_t type. 260ea906c41SOllivier Robert Choke Me. 261ea906c41SOllivier Robert # endif 262ea906c41SOllivier Robert #endif 263ea906c41SOllivier Robert 264ea906c41SOllivier Robert #ifndef HAVE_INTPTR_T 265ea906c41SOllivier Robert typedef signed long intptr_t; 266ea906c41SOllivier Robert #endif 267ea906c41SOllivier Robert #ifndef HAVE_UINTPTR_T 268ea906c41SOllivier Robert typedef unsigned long uintptr_t; 269ea906c41SOllivier Robert #endif 270ea906c41SOllivier Robert 271ea906c41SOllivier Robert /* redefine these for BSD style string libraries */ 272ea906c41SOllivier Robert #ifndef HAVE_STRCHR 273ea906c41SOllivier Robert # define strchr index 274ea906c41SOllivier Robert # define strrchr rindex 275ea906c41SOllivier Robert #endif 276ea906c41SOllivier Robert 277ea906c41SOllivier Robert #ifdef USE_FOPEN_BINARY 278ea906c41SOllivier Robert # ifndef FOPEN_BINARY_FLAG 279ea906c41SOllivier Robert # define FOPEN_BINARY_FLAG "b" 280ea906c41SOllivier Robert # endif 281ea906c41SOllivier Robert # ifndef FOPEN_TEXT_FLAG 282ea906c41SOllivier Robert # define FOPEN_TEXT_FLAG "t" 283ea906c41SOllivier Robert # endif 284ea906c41SOllivier Robert #else 285ea906c41SOllivier Robert # ifndef FOPEN_BINARY_FLAG 286ea906c41SOllivier Robert # define FOPEN_BINARY_FLAG 287ea906c41SOllivier Robert # endif 288ea906c41SOllivier Robert # ifndef FOPEN_TEXT_FLAG 289ea906c41SOllivier Robert # define FOPEN_TEXT_FLAG 290ea906c41SOllivier Robert # endif 291ea906c41SOllivier Robert #endif 292ea906c41SOllivier Robert 293ea906c41SOllivier Robert #ifndef STR 294ea906c41SOllivier Robert # define _STR(s) #s 295ea906c41SOllivier Robert # define STR(s) _STR(s) 296ea906c41SOllivier Robert #endif 297ea906c41SOllivier Robert 298ea906c41SOllivier Robert /* ##### Pointer sized word ##### */ 299ea906c41SOllivier Robert 300ea906c41SOllivier Robert /* FIXME: the MAX stuff in here is broken! */ 301ea906c41SOllivier Robert #if SIZEOF_CHARP > SIZEOF_INT 302ea906c41SOllivier Robert typedef long t_word; 303ea906c41SOllivier Robert #define WORD_MAX LONG_MAX 304ea906c41SOllivier Robert #define WORD_MIN LONG_MIN 305ea906c41SOllivier Robert #else /* SIZEOF_CHARP <= SIZEOF_INT */ 306ea906c41SOllivier Robert typedef int t_word; 307ea906c41SOllivier Robert #define WORD_MAX INT_MAX 308ea906c41SOllivier Robert #define WORD_MIN INT_MIN 309ea906c41SOllivier Robert #endif 310ea906c41SOllivier Robert 311ea906c41SOllivier Robert #endif /* COMPAT_H_GUARD */ 312ea906c41SOllivier Robert 313ea906c41SOllivier Robert /* 314ea906c41SOllivier Robert * Local Variables: 315ea906c41SOllivier Robert * mode: C 316ea906c41SOllivier Robert * c-file-style: "stroustrup" 317ea906c41SOllivier Robert * indent-tabs-mode: nil 318ea906c41SOllivier Robert * End: 319ea906c41SOllivier Robert * end of compat/compat.h */ 320