compat.h revision 181834
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