/* -*- Mode: C -*- */ /* --- fake the preprocessor into handlng portability */ /* * Time-stamp: "2005-09-21 20:56:13 bkorb" * * Author: Gary V Vaughan * Created: Mon Jun 30 15:54:46 1997 * * $Id: compat.h,v 4.6 2005/10/02 16:34:30 bkorb Exp $ */ #ifndef COMPAT_H #define COMPAT_H 1 #ifndef HAVE_CONFIG_H # error "compat.h" requires "config.h" #endif #include #ifndef HAVE_STRSIGNAL char * strsignal( int signo ); #endif #define _GNU_SOURCE 1 /* for strsignal in GNU's libc */ #define __USE_GNU 1 /* exact same thing as above */ #define __EXTENSIONS__ 1 /* and another way to call for it */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SYSTEM HEADERS: */ #include #include #include #if HAVE_SYS_PROCSET_H # include #endif #include #include #if defined( HAVE_POSIX_SYSINFO ) # include #elif defined( HAVE_UNAME_SYSCALL ) # include #endif #ifdef DAEMON_ENABLED # if HAVE_SYS_STROPTS_H # include # endif # if HAVE_SYS_SOCKET_H # include # endif # if ! defined(HAVE_SYS_POLL_H) && ! defined(HAVE_SYS_SELECT_H) # error This system cannot support daemon processing # endif # if HAVE_SYS_POLL_H # include # endif # if HAVE_SYS_SELECT_H # include # endif # if HAVE_NETINET_IN_H # include # endif # if HAVE_SYS_UN_H # include # endif #endif /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * USER HEADERS: */ #include #include #include /* * Directory opening stuff: */ # if defined (_POSIX_SOURCE) /* Posix does not require that the d_ino field be present, and some systems do not provide it. */ # define REAL_DIR_ENTRY(dp) 1 # else /* !_POSIX_SOURCE */ # define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) # endif /* !_POSIX_SOURCE */ # if defined (HAVE_DIRENT_H) # include # define D_NAMLEN(dirent) strlen((dirent)->d_name) # else /* !HAVE_DIRENT_H */ # define dirent direct # define D_NAMLEN(dirent) (dirent)->d_namlen # if defined (HAVE_SYS_NDIR_H) # include # endif /* HAVE_SYS_NDIR_H */ # if defined (HAVE_SYS_DIR_H) # include # endif /* HAVE_SYS_DIR_H */ # if defined (HAVE_NDIR_H) # include # endif /* HAVE_NDIR_H */ # endif /* !HAVE_DIRENT_H */ #include #ifdef HAVE_FCNTL_H # include #endif #ifndef O_NONBLOCK # define O_NONBLOCK FNDELAY #endif #if defined(HAVE_LIBGEN) && defined(HAVE_LIBGEN_H) # include #endif #include #include #include #include #if defined( HAVE_STDINT_H ) # include #elif defined( HAVE_INTTYPES_H ) # include #endif #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FIXUPS and CONVIENCE STUFF: */ #ifdef __cplusplus # define EXTERN extern "C" #else # define EXTERN extern #endif /* some systems #def errno! and others do not declare it!! */ #ifndef errno extern int errno; #endif /* Some machines forget this! */ # ifndef EXIT_FAILURE # define EXIT_SUCCESS 0 # define EXIT_FAILURE 1 # endif #ifndef NUL # define NUL '\0' #endif #ifndef NULL # define NULL 0 #endif #if !defined (MAXPATHLEN) && defined (HAVE_SYS_PARAM_H) # include #endif /* !MAXPATHLEN && HAVE_SYS_PARAM_H */ #if !defined (MAXPATHLEN) && defined (PATH_MAX) # define MAXPATHLEN PATH_MAX #endif /* !MAXPATHLEN && PATH_MAX */ #if !defined (MAXPATHLEN) # define MAXPATHLEN 4096 #endif /* MAXPATHLEN */ #ifndef LONG_MAX # define LONG_MAX ~(1L << (8*sizeof(long) -1)) # define INT_MAX ~(1 << (8*sizeof(int) -1)) #endif #ifndef ULONG_MAX # define ULONG_MAX ~(OUL) # define UINT_MAX ~(OU) #endif #ifndef SHORT_MAX # define SHORT_MAX ~(1 << (8*sizeof(short) -1)) #else # define USHORT_MAX ~(OUS) #endif #ifndef HAVE_INT8_T typedef signed char int8_t; #endif #ifndef HAVE_UINT8_T typedef unsigned char uint8_t; #endif #ifndef HAVE_INT16_T typedef signed short int16_t; #endif #ifndef HAVE_UINT16_T typedef unsigned short uint16_t; #endif #ifndef HAVE_INT32_T # if SIZEOF_INT == 4 typedef signed int int32_t; # elif SIZEOF_LONG == 4 typedef signed long int32_t; # endif #endif #ifndef HAVE_UINT32_T # if SIZEOF_INT == 4 typedef unsigned int uint32_t; # elif SIZEOF_LONG == 4 typedef unsigned long uint32_t; # else # error Cannot create a uint32_t type. # endif #endif #ifndef HAVE_INTPTR_T typedef signed long intptr_t; #endif #ifndef HAVE_UINTPTR_T typedef unsigned long uintptr_t; #endif /* redefine these for BSD style string libraries */ #ifndef HAVE_STRCHR # define strchr index # define strrchr rindex #endif #ifdef USE_FOPEN_BINARY # ifndef FOPEN_BINARY_FLAG # define FOPEN_BINARY_FLAG "b" # endif # ifndef FOPEN_TEXT_FLAG # define FOPEN_TEXT_FLAG "t" # endif #else # ifndef FOPEN_BINARY_FLAG # define FOPEN_BINARY_FLAG # endif # ifndef FOPEN_TEXT_FLAG # define FOPEN_TEXT_FLAG # endif #endif #ifndef STR # define _STR(s) #s # define STR(s) _STR(s) #endif /* ##### Pointer sized word ##### */ /* FIXME: the MAX stuff in here is broken! */ #if SIZEOF_CHARP > SIZEOF_INT typedef long t_word; #define WORD_MAX LONG_MAX #define WORD_MIN LONG_MIN #else /* SIZEOF_CHARP <= SIZEOF_INT */ typedef int t_word; #define WORD_MAX INT_MAX #define WORD_MIN INT_MIN #endif #endif /* COMPAT_H */ /* * Local Variables: * mode: C * c-file-style: "stroustrup" * tab-width: 4 * indent-tabs-mode: nil * End: * end of compat/compat.h */