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