| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 | /*  -*- Mode: C -*-  *//* compat.h --- fake the preprocessor into handlng portability * *  Time-stamp:      "2008-06-14 09:36:25 bkorb" * * $Id: compat.h,v 4.20 2008/06/14 22:24:22 bkorb Exp $ * *  compat.h is free software. *  This file is part of AutoGen. * *  AutoGen copyright (c) 1992-2008 Bruce Korb - all rights reserved *  AutoGen copyright (c) 1992-2008 Bruce Korb - all rights reserved * *  AutoGen is free software: you can redistribute it and/or modify it *  under the terms of the GNU General Public License as published by the *  Free Software Foundation, either version 3 of the License, or *  (at your option) any later version. * *  AutoGen is distributed in the hope that it will be useful, but *  WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *  See the GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License along *  with this program.  If not, see <http://www.gnu.org/licenses/>. * *  As a special exception, Bruce Korb gives permission for additional *  uses of the text contained in the release of compat.h. * *  The exception is that, if you link the compat.h library with other *  files to produce an executable, this does not by itself cause the *  resulting executable to be covered by the GNU General Public License. *  Your use of that executable is in no way restricted on account of *  linking the compat.h library code into it. * *  This exception does not however invalidate any other reasons why *  the executable file might be covered by the GNU General Public License. * *  This exception applies only to the code released by Bruce Korb under *  the name compat.h.  If you copy code from other sources under the *  General Public License into a copy of compat.h, as the General Public *  License permits, the exception does not apply to the code that you add *  in this way.  To avoid misleading anyone as to the status of such *  modified files, you must delete this exception notice from them. * *  If you write modifications of your own for compat.h, it is your choice *  whether to permit this exception to apply to your modifications. *  If you do not wish that, delete this exception notice. */#ifndef COMPAT_H_GUARD#define COMPAT_H_GUARD 1#if defined(HAVE_CONFIG_H)#  include <config.h>#elif defined(_WIN32) && !defined(__CYGWIN__)#  include "windows-config.h"#else#  error "compat.h" requires "config.h"   choke me.#endif#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 <sys/types.h>#ifdef HAVE_SYS_MMAN_H#  include <sys/mman.h>#endif#include <sys/param.h>#if HAVE_SYS_PROCSET_H#  include <sys/procset.h>#endif#include <sys/stat.h>#include <sys/wait.h>#if defined( HAVE_SOLARIS_SYSINFO )#  include <sys/systeminfo.h>#elif defined( HAVE_UNAME_SYSCALL )#  include <sys/utsname.h>#endif#ifdef DAEMON_ENABLED#  if HAVE_SYS_STROPTS_H#  include <sys/stropts.h>#  endif#  if HAVE_SYS_SOCKET_H#  include <sys/socket.h>#  endif#  if ! defined(HAVE_SYS_POLL_H) && ! defined(HAVE_SYS_SELECT_H)#    error This system cannot support daemon processing     Choke Me.#  endif#  if HAVE_SYS_POLL_H#  include <sys/poll.h>#  endif#  if HAVE_SYS_SELECT_H#  include <sys/select.h>#  endif#  if HAVE_NETINET_IN_H#  include <netinet/in.h>#  endif#  if HAVE_SYS_UN_H#  include <sys/un.h>#  endif#endif/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  USER HEADERS: */#include <stdio.h>#include <assert.h>#include <ctype.h>/* *  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 <dirent.h>#   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 <sys/ndir.h>#   endif /* HAVE_SYS_NDIR_H */#   if defined (HAVE_SYS_DIR_H)#     include <sys/dir.h>#   endif /* HAVE_SYS_DIR_H */#   if defined (HAVE_NDIR_H)#     include <ndir.h>#   endif /* HAVE_NDIR_H */# endif /* !HAVE_DIRENT_H */#include <errno.h>#ifdef HAVE_FCNTL_H# include <fcntl.h>#endif#ifndef O_NONBLOCK# define O_NONBLOCK FNDELAY#endif#if defined(HAVE_LIBGEN) && defined(HAVE_LIBGEN_H)#  include <libgen.h>#endif#if defined(HAVE_LIMITS_H)  /* this is also in options.h */#  include <limits.h>#elif defined(HAVE_SYS_LIMITS_H)#  include <sys/limits.h>#endif /* HAVE_LIMITS/SYS_LIMITS_H */#include <memory.h>#include <setjmp.h>#include <signal.h>#if defined( HAVE_STDINT_H )#  include <stdint.h>#elif defined( HAVE_INTTYPES_H )#  include <inttypes.h>#endif#include <stdlib.h>#include <string.h>#include <time.h>#ifdef HAVE_UTIME_H#  include <utime.h>#endif#ifdef HAVE_UNISTD_H#  include <unistd.h>#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 <sys/param.h>#endif /* !MAXPATHLEN && HAVE_SYS_PARAM_H */#if !defined (MAXPATHLEN) && defined (PATH_MAX)#  define MAXPATHLEN PATH_MAX#endif /* !MAXPATHLEN && PATH_MAX */#if !defined (MAXPATHLEN) && defined(_MAX_PATH)#  define PATH_MAX _MAX_PATH#  define MAXPATHLEN _MAX_PATH#endif#if !defined (MAXPATHLEN)#  define MAXPATHLEN ((size_t)4096)#endif /* MAXPATHLEN */#define AG_PATH_MAX  ((size_t)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_UINT_T  typedef unsigned int      uint_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.    Choke Me.# endif#endif#ifndef HAVE_INTPTR_T  typedef signed long   intptr_t;#endif#ifndef HAVE_UINTPTR_T  typedef unsigned long uintptr_t;#endif#ifndef HAVE_SIZE_T  typedef unsigned int  size_t;#endif#ifndef HAVE_WINT_T  typedef unsigned int  wint_t;#endif#ifndef HAVE_PID_T  typedef signed int    pid_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_GUARD *//* * Local Variables: * mode: C * c-file-style: "stroustrup" * indent-tabs-mode: nil * End: * end of compat/compat.h */
 |