123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- /* -*- Mode: C -*-
- *
- * compat.h is free software.
- * This file is part of AutoGen and AutoOpts.
- *
- * AutoGen Copyright (C) 1992-2018 by Bruce Korb - all rights reserved
- *
- * AutoOpts is available under any one of two licenses. The license
- * in use must be one of these two and the choice is under the control
- * of the user of the license.
- *
- * The GNU Lesser General Public License, version 3 or later
- * See the files "COPYING.lgplv3" and "COPYING.gplv3"
- *
- * The Modified Berkeley Software Distribution License
- * See the file "COPYING.mbsd"
- *
- * These files have the following sha256 sums:
- *
- * 8584710e9b04216a394078dc156b781d0b47e1729104d666658aecef8ee32e95 COPYING.gplv3
- * 4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b COPYING.lgplv3
- * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd
- */
- /**
- * \file compat.h
- * fake the preprocessor into handlng stuff portability
- */
- #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
- # ifndef HAVE_RAW_DECL_STRSIGNAL
- char * strsignal(int signo);
- # endif
- #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>
- #ifdef HAVE_SYS_WAIT_H
- # include <sys/wait.h>
- #endif
- #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
- #if defined(HAVE_STDBOOL_H)
- # include <stdbool.h>
- #elif ! defined(bool)
- typedef enum { false = 0, true = 1 } _Bool;
- # define bool _Bool
- /* The other macros must be usable in preprocessor directives. */
- # define false 0
- # define true 1
- #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 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;
- # define HAVE_INT8_T 1
- #endif
- #ifndef HAVE_UINT8_T
- typedef unsigned char uint8_t;
- # define HAVE_UINT8_T 1
- #endif
- #ifndef HAVE_INT16_T
- typedef signed short int16_t;
- # define HAVE_INT16_T 1
- #endif
- #ifndef HAVE_UINT16_T
- typedef unsigned short uint16_t;
- # define HAVE_UINT16_T 1
- #endif
- #ifndef HAVE_INT32_T
- # if SIZEOF_INT == 4
- typedef signed int int32_t;
- # elif SIZEOF_LONG == 4
- typedef signed long int32_t;
- # endif
- # define HAVE_INT32_T 1
- #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
- # define HAVE_UINT32_T 1
- #endif
- #ifndef HAVE_INTPTR_T
- # if SIZEOF_CHARP == SIZEOF_LONG
- typedef signed long intptr_t;
- # else
- typedef signed int intptr_t;
- # endif
- # define HAVE_INTPTR_T 1
- #endif
- #ifndef HAVE_UINTPTR_T
- # if SIZEOF_CHARP == SIZEOF_LONG
- typedef unsigned long intptr_t;
- # else
- typedef unsigned int intptr_t;
- # endif
- # define HAVE_INTPTR_T 1
- #endif
- #ifndef HAVE_UINT_T
- typedef unsigned int uint_t;
- # define HAVE_UINT_T 1
- #endif
- #ifndef HAVE_SIZE_T
- typedef unsigned int size_t;
- # define HAVE_SIZE_T 1
- #endif
- #ifndef HAVE_WINT_T
- typedef unsigned int wint_t;
- # define HAVE_WINT_T 1
- #endif
- #ifndef HAVE_PID_T
- typedef signed int pid_t;
- # define HAVE_PID_T 1
- #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 */
|