xref: /freebsd/contrib/ntp/sntp/libopts/compat/compat.h (revision b1f9167f94059fd55c630891d359bcff987bd7eb)
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