xref: /freebsd/contrib/ntp/sntp/libopts/compat/compat.h (revision af23369a6deaaeb612ab266eb88b8bb8d560c322)
1 /*  -*- Mode: C -*-
2  *
3  *  compat.h is free software.
4  *  This file is part of AutoGen and AutoOpts.
5  *
6  *  AutoGen Copyright (C) 1992-2015 by Bruce Korb - all rights reserved
7  *
8  *  AutoOpts is available under any one of two licenses.  The license
9  *  in use must be one of these two and the choice is under the control
10  *  of the user of the license.
11  *
12  *   The GNU Lesser General Public License, version 3 or later
13  *      See the files "COPYING.lgplv3" and "COPYING.gplv3"
14  *
15  *   The Modified Berkeley Software Distribution License
16  *      See the file "COPYING.mbsd"
17  *
18  *  These files have the following sha256 sums:
19  *
20  *  8584710e9b04216a394078dc156b781d0b47e1729104d666658aecef8ee32e95  COPYING.gplv3
21  *  4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b  COPYING.lgplv3
22  *  13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239  COPYING.mbsd
23  */
24 
25 /**
26  * \file compat.h
27  *  fake the preprocessor into handlng stuff portability
28  */
29 #ifndef COMPAT_H_GUARD
30 #define COMPAT_H_GUARD 1
31 
32 #if defined(HAVE_CONFIG_H)
33 #  include <config.h>
34 
35 #elif defined(_WIN32) && !defined(__CYGWIN__)
36 #  include "windows-config.h"
37 
38 #else
39 #  error "compat.h" requires "config.h"
40    choke me.
41 #endif
42 
43 
44 #ifndef HAVE_STRSIGNAL
45 # ifndef HAVE_RAW_DECL_STRSIGNAL
46    char * strsignal(int signo);
47 # endif
48 #endif
49 
50 #define  _GNU_SOURCE    1 /* for strsignal in GNU's libc */
51 #define  __USE_GNU      1 /* exact same thing as above   */
52 #define  __EXTENSIONS__ 1 /* and another way to call for it */
53 
54 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
55  *
56  *  SYSTEM HEADERS:
57  */
58 #include <sys/types.h>
59 #ifdef HAVE_SYS_MMAN_H
60 #  include <sys/mman.h>
61 #endif
62 #include <sys/param.h>
63 #if HAVE_SYS_PROCSET_H
64 #  include <sys/procset.h>
65 #endif
66 #include <sys/stat.h>
67 #ifdef HAVE_SYS_WAIT_H
68 #  include <sys/wait.h>
69 #endif
70 
71 #if defined( HAVE_SOLARIS_SYSINFO )
72 #  include <sys/systeminfo.h>
73 #elif defined( HAVE_UNAME_SYSCALL )
74 #  include <sys/utsname.h>
75 #endif
76 
77 #ifdef DAEMON_ENABLED
78 #  if HAVE_SYS_STROPTS_H
79 #  include <sys/stropts.h>
80 #  endif
81 
82 #  if HAVE_SYS_SOCKET_H
83 #  include <sys/socket.h>
84 #  endif
85 
86 #  if ! defined(HAVE_SYS_POLL_H) && ! defined(HAVE_SYS_SELECT_H)
87 #    error This system cannot support daemon processing
88      Choke Me.
89 #  endif
90 
91 #  if HAVE_SYS_POLL_H
92 #  include <sys/poll.h>
93 #  endif
94 
95 #  if HAVE_SYS_SELECT_H
96 #  include <sys/select.h>
97 #  endif
98 
99 #  if HAVE_NETINET_IN_H
100 #  include <netinet/in.h>
101 #  endif
102 
103 #  if HAVE_SYS_UN_H
104 #  include <sys/un.h>
105 #  endif
106 #endif
107 
108 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
109  *
110  *  USER HEADERS:
111  */
112 #include <stdio.h>
113 #include <assert.h>
114 #include <ctype.h>
115 
116 /*
117  *  Directory opening stuff:
118  */
119 # if defined (_POSIX_SOURCE)
120 /* Posix does not require that the d_ino field be present, and some
121    systems do not provide it. */
122 #    define REAL_DIR_ENTRY(dp) 1
123 # else /* !_POSIX_SOURCE */
124 #    define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
125 # endif /* !_POSIX_SOURCE */
126 
127 # if defined (HAVE_DIRENT_H)
128 #   include <dirent.h>
129 #   define D_NAMLEN(dirent) strlen((dirent)->d_name)
130 # else /* !HAVE_DIRENT_H */
131 #   define dirent direct
132 #   define D_NAMLEN(dirent) (dirent)->d_namlen
133 #   if defined (HAVE_SYS_NDIR_H)
134 #     include <sys/ndir.h>
135 #   endif /* HAVE_SYS_NDIR_H */
136 #   if defined (HAVE_SYS_DIR_H)
137 #     include <sys/dir.h>
138 #   endif /* HAVE_SYS_DIR_H */
139 #   if defined (HAVE_NDIR_H)
140 #     include <ndir.h>
141 #   endif /* HAVE_NDIR_H */
142 # endif /* !HAVE_DIRENT_H */
143 
144 #include <errno.h>
145 #ifdef HAVE_FCNTL_H
146 # include <fcntl.h>
147 #endif
148 #ifndef O_NONBLOCK
149 # define O_NONBLOCK FNDELAY
150 #endif
151 
152 #if defined(HAVE_LIBGEN) && defined(HAVE_LIBGEN_H)
153 #  include <libgen.h>
154 #endif
155 
156 #if defined(HAVE_LIMITS_H)  /* this is also in options.h */
157 #  include <limits.h>
158 #elif defined(HAVE_SYS_LIMITS_H)
159 #  include <sys/limits.h>
160 #endif /* HAVE_LIMITS/SYS_LIMITS_H */
161 
162 #include <memory.h>
163 #include <setjmp.h>
164 #include <signal.h>
165 
166 #if defined(HAVE_STDINT_H)
167 #  include <stdint.h>
168 
169 #elif defined(HAVE_INTTYPES_H)
170 #  include <inttypes.h>
171 #endif
172 
173 #include <stdlib.h>
174 #include <string.h>
175 #include <time.h>
176 
177 #ifdef HAVE_UTIME_H
178 #  include <utime.h>
179 #endif
180 
181 #ifdef HAVE_UNISTD_H
182 #  include <unistd.h>
183 #endif
184 
185 #ifdef HAVE_STDBOOL_H
186 #  include <stdbool.h>
187 #else
188    typedef enum { false = 0, true = 1 } _Bool;
189 #  define bool _Bool
190 
191    /* The other macros must be usable in preprocessor directives.  */
192 #  define false 0
193 #  define true 1
194 #endif
195 
196 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
197  *
198  *  FIXUPS and CONVIENCE STUFF:
199  */
200 #ifdef __cplusplus
201 #   define EXTERN extern "C"
202 #else
203 #   define EXTERN extern
204 #endif
205 
206 /* some systems #def errno! and others do not declare it!! */
207 #ifndef errno
208    extern int errno;
209 #endif
210 
211 /* Some machines forget this! */
212 
213 # ifndef EXIT_FAILURE
214 #   define EXIT_SUCCESS 0
215 #   define EXIT_FAILURE 1
216 # endif
217 
218 #ifndef NUL
219 #  define NUL '\0'
220 #endif
221 
222 #ifndef NULL
223 #  define NULL 0
224 #endif
225 
226 #if !defined (MAXPATHLEN) && defined (HAVE_SYS_PARAM_H)
227 #  include <sys/param.h>
228 #endif /* !MAXPATHLEN && HAVE_SYS_PARAM_H */
229 
230 #if !defined (MAXPATHLEN) && defined (PATH_MAX)
231 #  define MAXPATHLEN PATH_MAX
232 #endif /* !MAXPATHLEN && PATH_MAX */
233 
234 #if !defined (MAXPATHLEN) && defined(_MAX_PATH)
235 #  define PATH_MAX _MAX_PATH
236 #  define MAXPATHLEN _MAX_PATH
237 #endif
238 
239 #if !defined (MAXPATHLEN)
240 #  define MAXPATHLEN 4096
241 #endif /* MAXPATHLEN */
242 
243 #define AG_PATH_MAX  ((size_t)MAXPATHLEN)
244 
245 #ifndef LONG_MAX
246 #  define LONG_MAX      ~(1L << (8*sizeof(long) -1))
247 #  define INT_MAX       ~(1 << (8*sizeof(int) -1))
248 #endif
249 
250 #ifndef ULONG_MAX
251 #  define ULONG_MAX     ~(OUL)
252 #  define UINT_MAX      ~(OU)
253 #endif
254 
255 #ifndef SHORT_MAX
256 #  define SHORT_MAX     ~(1 << (8*sizeof(short) - 1))
257 #else
258 #  define USHORT_MAX    ~(OUS)
259 #endif
260 
261 #ifndef HAVE_INT8_T
262   typedef signed char           int8_t;
263 # define  HAVE_INT8_T           1
264 #endif
265 #ifndef HAVE_UINT8_T
266   typedef unsigned char         uint8_t;
267 # define  HAVE_UINT8_T          1
268 #endif
269 #ifndef HAVE_INT16_T
270   typedef signed short          int16_t;
271 # define  HAVE_INT16_T          1
272 #endif
273 #ifndef HAVE_UINT16_T
274   typedef unsigned short        uint16_t;
275 # define  HAVE_UINT16_T         1
276 #endif
277 
278 #ifndef HAVE_INT32_T
279 # if SIZEOF_INT ==              4
280     typedef signed int          int32_t;
281 # elif SIZEOF_LONG ==           4
282     typedef signed long         int32_t;
283 # endif
284 # define  HAVE_INT32_T          1
285 #endif
286 
287 #ifndef HAVE_UINT32_T
288 # if SIZEOF_INT ==              4
289     typedef unsigned int        uint32_t;
290 # elif SIZEOF_LONG ==           4
291     typedef unsigned long       uint32_t;
292 # else
293 #   error Cannot create a uint32_t type.
294     Choke Me.
295 # endif
296 # define  HAVE_UINT32_T         1
297 #endif
298 
299 #ifndef HAVE_INTPTR_T
300 # if SIZEOF_CHARP == SIZEOF_LONG
301     typedef signed long         intptr_t;
302 # else
303     typedef signed int          intptr_t;
304 # endif
305 # define  HAVE_INTPTR_T         1
306 #endif
307 
308 #ifndef HAVE_UINTPTR_T
309 # if SIZEOF_CHARP == SIZEOF_LONG
310     typedef unsigned long       intptr_t;
311 # else
312     typedef unsigned int        intptr_t;
313 # endif
314 # define  HAVE_INTPTR_T         1
315 #endif
316 
317 #ifndef HAVE_UINT_T
318   typedef unsigned int          uint_t;
319 # define  HAVE_UINT_T           1
320 #endif
321 
322 #ifndef HAVE_SIZE_T
323   typedef unsigned int          size_t;
324 # define  HAVE_SIZE_T           1
325 #endif
326 #ifndef HAVE_WINT_T
327   typedef unsigned int          wint_t;
328 # define  HAVE_WINT_T           1
329 #endif
330 #ifndef HAVE_PID_T
331   typedef signed int            pid_t;
332 # define  HAVE_PID_T            1
333 #endif
334 
335 /* redefine these for BSD style string libraries */
336 #ifndef HAVE_STRCHR
337 #  define strchr            index
338 #  define strrchr           rindex
339 #endif
340 
341 #ifdef USE_FOPEN_BINARY
342 #  ifndef FOPEN_BINARY_FLAG
343 #    define FOPEN_BINARY_FLAG   "b"
344 #  endif
345 #  ifndef FOPEN_TEXT_FLAG
346 #    define FOPEN_TEXT_FLAG     "t"
347 #  endif
348 #else
349 #  ifndef FOPEN_BINARY_FLAG
350 #    define FOPEN_BINARY_FLAG
351 #  endif
352 #  ifndef FOPEN_TEXT_FLAG
353 #    define FOPEN_TEXT_FLAG
354 #  endif
355 #endif
356 
357 #ifndef STR
358 #  define _STR(s) #s
359 #  define STR(s)  _STR(s)
360 #endif
361 
362 /* ##### Pointer sized word ##### */
363 
364 /* FIXME:  the MAX stuff in here is broken! */
365 #if SIZEOF_CHARP > SIZEOF_INT
366    typedef long t_word;
367    #define WORD_MAX  LONG_MAX
368    #define WORD_MIN  LONG_MIN
369 #else /* SIZEOF_CHARP <= SIZEOF_INT */
370    typedef int t_word;
371    #define WORD_MAX  INT_MAX
372    #define WORD_MIN  INT_MIN
373 #endif
374 
375 #endif /* COMPAT_H_GUARD */
376 
377 /*
378  * Local Variables:
379  * mode: C
380  * c-file-style: "stroustrup"
381  * indent-tabs-mode: nil
382  * End:
383  * end of compat/compat.h */
384