xref: /freebsd/contrib/ntp/sntp/libopts/compat/compat.h (revision ea906c4152774dff300bb26fbfc1e4188351c89a)
1ea906c41SOllivier Robert /*  -*- Mode: C -*-  */
2ea906c41SOllivier Robert 
3ea906c41SOllivier Robert /* --- fake the preprocessor into handlng portability */
4ea906c41SOllivier Robert /*
5ea906c41SOllivier Robert  *  Time-stamp:      "2007-02-03 17:41:06 bkorb"
6ea906c41SOllivier Robert  *
7ea906c41SOllivier Robert  * Author:           Gary V Vaughan <gvaughan@oranda.demon.co.uk>
8ea906c41SOllivier Robert  * Created:          Mon Jun 30 15:54:46 1997
9ea906c41SOllivier Robert  *
10ea906c41SOllivier Robert  * $Id: compat.h,v 4.16 2007/04/27 01:10:47 bkorb Exp $
11ea906c41SOllivier Robert  */
12ea906c41SOllivier Robert #ifndef COMPAT_H_GUARD
13ea906c41SOllivier Robert #define COMPAT_H_GUARD 1
14ea906c41SOllivier Robert 
15ea906c41SOllivier Robert #if defined(HAVE_CONFIG_H)
16ea906c41SOllivier Robert #  include <config.h>
17ea906c41SOllivier Robert 
18ea906c41SOllivier Robert #elif defined(_WIN32) && !defined(__CYGWIN__)
19ea906c41SOllivier Robert #  include "windows-config.h"
20ea906c41SOllivier Robert 
21ea906c41SOllivier Robert #else
22ea906c41SOllivier Robert #  error "compat.h" requires "config.h"
23ea906c41SOllivier Robert    choke me.
24ea906c41SOllivier Robert #endif
25ea906c41SOllivier Robert 
26ea906c41SOllivier Robert 
27ea906c41SOllivier Robert #ifndef HAVE_STRSIGNAL
28ea906c41SOllivier Robert    char * strsignal( int signo );
29ea906c41SOllivier Robert #endif
30ea906c41SOllivier Robert 
31ea906c41SOllivier Robert #define  _GNU_SOURCE    1 /* for strsignal in GNU's libc */
32ea906c41SOllivier Robert #define  __USE_GNU      1 /* exact same thing as above   */
33ea906c41SOllivier Robert #define  __EXTENSIONS__ 1 /* and another way to call for it */
34ea906c41SOllivier Robert 
35ea906c41SOllivier Robert /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
36ea906c41SOllivier Robert  *
37ea906c41SOllivier Robert  *  SYSTEM HEADERS:
38ea906c41SOllivier Robert  */
39ea906c41SOllivier Robert #include <sys/types.h>
40ea906c41SOllivier Robert #ifdef HAVE_SYS_MMAN_H
41ea906c41SOllivier Robert #  include <sys/mman.h>
42ea906c41SOllivier Robert #endif
43ea906c41SOllivier Robert #include <sys/param.h>
44ea906c41SOllivier Robert #if HAVE_SYS_PROCSET_H
45ea906c41SOllivier Robert #  include <sys/procset.h>
46ea906c41SOllivier Robert #endif
47ea906c41SOllivier Robert #include <sys/stat.h>
48ea906c41SOllivier Robert #include <sys/wait.h>
49ea906c41SOllivier Robert 
50ea906c41SOllivier Robert #if defined( HAVE_SOLARIS_SYSINFO )
51ea906c41SOllivier Robert #  include <sys/systeminfo.h>
52ea906c41SOllivier Robert #elif defined( HAVE_UNAME_SYSCALL )
53ea906c41SOllivier Robert #  include <sys/utsname.h>
54ea906c41SOllivier Robert #endif
55ea906c41SOllivier Robert 
56ea906c41SOllivier Robert #ifdef DAEMON_ENABLED
57ea906c41SOllivier Robert #  if HAVE_SYS_STROPTS_H
58ea906c41SOllivier Robert #  include <sys/stropts.h>
59ea906c41SOllivier Robert #  endif
60ea906c41SOllivier Robert 
61ea906c41SOllivier Robert #  if HAVE_SYS_SOCKET_H
62ea906c41SOllivier Robert #  include <sys/socket.h>
63ea906c41SOllivier Robert #  endif
64ea906c41SOllivier Robert 
65ea906c41SOllivier Robert #  if ! defined(HAVE_SYS_POLL_H) && ! defined(HAVE_SYS_SELECT_H)
66ea906c41SOllivier Robert #    error This system cannot support daemon processing
67ea906c41SOllivier Robert      Choke Me.
68ea906c41SOllivier Robert #  endif
69ea906c41SOllivier Robert 
70ea906c41SOllivier Robert #  if HAVE_SYS_POLL_H
71ea906c41SOllivier Robert #  include <sys/poll.h>
72ea906c41SOllivier Robert #  endif
73ea906c41SOllivier Robert 
74ea906c41SOllivier Robert #  if HAVE_SYS_SELECT_H
75ea906c41SOllivier Robert #  include <sys/select.h>
76ea906c41SOllivier Robert #  endif
77ea906c41SOllivier Robert 
78ea906c41SOllivier Robert #  if HAVE_NETINET_IN_H
79ea906c41SOllivier Robert #  include <netinet/in.h>
80ea906c41SOllivier Robert #  endif
81ea906c41SOllivier Robert 
82ea906c41SOllivier Robert #  if HAVE_SYS_UN_H
83ea906c41SOllivier Robert #  include <sys/un.h>
84ea906c41SOllivier Robert #  endif
85ea906c41SOllivier Robert #endif
86ea906c41SOllivier Robert 
87ea906c41SOllivier Robert /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
88ea906c41SOllivier Robert  *
89ea906c41SOllivier Robert  *  USER HEADERS:
90ea906c41SOllivier Robert  */
91ea906c41SOllivier Robert #include <stdio.h>
92ea906c41SOllivier Robert #include <assert.h>
93ea906c41SOllivier Robert #include <ctype.h>
94ea906c41SOllivier Robert 
95ea906c41SOllivier Robert /*
96ea906c41SOllivier Robert  *  Directory opening stuff:
97ea906c41SOllivier Robert  */
98ea906c41SOllivier Robert # if defined (_POSIX_SOURCE)
99ea906c41SOllivier Robert /* Posix does not require that the d_ino field be present, and some
100ea906c41SOllivier Robert    systems do not provide it. */
101ea906c41SOllivier Robert #    define REAL_DIR_ENTRY(dp) 1
102ea906c41SOllivier Robert # else /* !_POSIX_SOURCE */
103ea906c41SOllivier Robert #    define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
104ea906c41SOllivier Robert # endif /* !_POSIX_SOURCE */
105ea906c41SOllivier Robert 
106ea906c41SOllivier Robert # if defined (HAVE_DIRENT_H)
107ea906c41SOllivier Robert #   include <dirent.h>
108ea906c41SOllivier Robert #   define D_NAMLEN(dirent) strlen((dirent)->d_name)
109ea906c41SOllivier Robert # else /* !HAVE_DIRENT_H */
110ea906c41SOllivier Robert #   define dirent direct
111ea906c41SOllivier Robert #   define D_NAMLEN(dirent) (dirent)->d_namlen
112ea906c41SOllivier Robert #   if defined (HAVE_SYS_NDIR_H)
113ea906c41SOllivier Robert #     include <sys/ndir.h>
114ea906c41SOllivier Robert #   endif /* HAVE_SYS_NDIR_H */
115ea906c41SOllivier Robert #   if defined (HAVE_SYS_DIR_H)
116ea906c41SOllivier Robert #     include <sys/dir.h>
117ea906c41SOllivier Robert #   endif /* HAVE_SYS_DIR_H */
118ea906c41SOllivier Robert #   if defined (HAVE_NDIR_H)
119ea906c41SOllivier Robert #     include <ndir.h>
120ea906c41SOllivier Robert #   endif /* HAVE_NDIR_H */
121ea906c41SOllivier Robert # endif /* !HAVE_DIRENT_H */
122ea906c41SOllivier Robert 
123ea906c41SOllivier Robert #include <errno.h>
124ea906c41SOllivier Robert #ifdef HAVE_FCNTL_H
125ea906c41SOllivier Robert # include <fcntl.h>
126ea906c41SOllivier Robert #endif
127ea906c41SOllivier Robert #ifndef O_NONBLOCK
128ea906c41SOllivier Robert # define O_NONBLOCK FNDELAY
129ea906c41SOllivier Robert #endif
130ea906c41SOllivier Robert 
131ea906c41SOllivier Robert #if defined(HAVE_LIBGEN) && defined(HAVE_LIBGEN_H)
132ea906c41SOllivier Robert #  include <libgen.h>
133ea906c41SOllivier Robert #endif
134ea906c41SOllivier Robert 
135ea906c41SOllivier Robert #if defined(HAVE_LIMITS_H)  /* this is also in options.h */
136ea906c41SOllivier Robert #  include <limits.h>
137ea906c41SOllivier Robert #elif defined(HAVE_SYS_LIMITS_H)
138ea906c41SOllivier Robert #  include <sys/limits.h>
139ea906c41SOllivier Robert #endif /* HAVE_LIMITS/SYS_LIMITS_H */
140ea906c41SOllivier Robert 
141ea906c41SOllivier Robert #include <memory.h>
142ea906c41SOllivier Robert #include <setjmp.h>
143ea906c41SOllivier Robert #include <signal.h>
144ea906c41SOllivier Robert 
145ea906c41SOllivier Robert #if defined( HAVE_STDINT_H )
146ea906c41SOllivier Robert #  include <stdint.h>
147ea906c41SOllivier Robert #elif defined( HAVE_INTTYPES_H )
148ea906c41SOllivier Robert #  include <inttypes.h>
149ea906c41SOllivier Robert #endif
150ea906c41SOllivier Robert 
151ea906c41SOllivier Robert #include <stdlib.h>
152ea906c41SOllivier Robert #include <string.h>
153ea906c41SOllivier Robert 
154ea906c41SOllivier Robert #include <time.h>
155ea906c41SOllivier Robert 
156ea906c41SOllivier Robert #ifdef HAVE_UTIME_H
157ea906c41SOllivier Robert #  include <utime.h>
158ea906c41SOllivier Robert #endif
159ea906c41SOllivier Robert 
160ea906c41SOllivier Robert #ifdef HAVE_UNISTD_H
161ea906c41SOllivier Robert #  include <unistd.h>
162ea906c41SOllivier Robert #endif
163ea906c41SOllivier Robert 
164ea906c41SOllivier Robert /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
165ea906c41SOllivier Robert  *
166ea906c41SOllivier Robert  *  FIXUPS and CONVIENCE STUFF:
167ea906c41SOllivier Robert  */
168ea906c41SOllivier Robert #ifdef __cplusplus
169ea906c41SOllivier Robert #   define EXTERN extern "C"
170ea906c41SOllivier Robert #else
171ea906c41SOllivier Robert #   define EXTERN extern
172ea906c41SOllivier Robert #endif
173ea906c41SOllivier Robert 
174ea906c41SOllivier Robert /* some systems #def errno! and others do not declare it!! */
175ea906c41SOllivier Robert #ifndef errno
176ea906c41SOllivier Robert    extern int errno;
177ea906c41SOllivier Robert #endif
178ea906c41SOllivier Robert 
179ea906c41SOllivier Robert /* Some machines forget this! */
180ea906c41SOllivier Robert 
181ea906c41SOllivier Robert # ifndef EXIT_FAILURE
182ea906c41SOllivier Robert #   define EXIT_SUCCESS 0
183ea906c41SOllivier Robert #   define EXIT_FAILURE 1
184ea906c41SOllivier Robert # endif
185ea906c41SOllivier Robert 
186ea906c41SOllivier Robert #ifndef NUL
187ea906c41SOllivier Robert #  define NUL '\0'
188ea906c41SOllivier Robert #endif
189ea906c41SOllivier Robert 
190ea906c41SOllivier Robert #ifndef NULL
191ea906c41SOllivier Robert #  define NULL 0
192ea906c41SOllivier Robert #endif
193ea906c41SOllivier Robert 
194ea906c41SOllivier Robert #if !defined (MAXPATHLEN) && defined (HAVE_SYS_PARAM_H)
195ea906c41SOllivier Robert #  include <sys/param.h>
196ea906c41SOllivier Robert #endif /* !MAXPATHLEN && HAVE_SYS_PARAM_H */
197ea906c41SOllivier Robert 
198ea906c41SOllivier Robert #if !defined (MAXPATHLEN) && defined (PATH_MAX)
199ea906c41SOllivier Robert #  define MAXPATHLEN PATH_MAX
200ea906c41SOllivier Robert #endif /* !MAXPATHLEN && PATH_MAX */
201ea906c41SOllivier Robert 
202ea906c41SOllivier Robert #if !defined (MAXPATHLEN) && defined(_MAX_PATH)
203ea906c41SOllivier Robert #  define PATH_MAX _MAX_PATH
204ea906c41SOllivier Robert #  define MAXPATHLEN _MAX_PATH
205ea906c41SOllivier Robert #endif
206ea906c41SOllivier Robert 
207ea906c41SOllivier Robert #if !defined (MAXPATHLEN)
208ea906c41SOllivier Robert #  define MAXPATHLEN ((size_t)4096)
209ea906c41SOllivier Robert #endif /* MAXPATHLEN */
210ea906c41SOllivier Robert 
211ea906c41SOllivier Robert #define AG_PATH_MAX  ((size_t)MAXPATHLEN)
212ea906c41SOllivier Robert 
213ea906c41SOllivier Robert #ifndef LONG_MAX
214ea906c41SOllivier Robert #  define LONG_MAX      ~(1L << (8*sizeof(long) -1))
215ea906c41SOllivier Robert #  define INT_MAX       ~(1 << (8*sizeof(int) -1))
216ea906c41SOllivier Robert #endif
217ea906c41SOllivier Robert 
218ea906c41SOllivier Robert #ifndef ULONG_MAX
219ea906c41SOllivier Robert #  define ULONG_MAX     ~(OUL)
220ea906c41SOllivier Robert #  define UINT_MAX      ~(OU)
221ea906c41SOllivier Robert #endif
222ea906c41SOllivier Robert 
223ea906c41SOllivier Robert #ifndef SHORT_MAX
224ea906c41SOllivier Robert #  define SHORT_MAX     ~(1 << (8*sizeof(short) -1))
225ea906c41SOllivier Robert #else
226ea906c41SOllivier Robert #  define USHORT_MAX    ~(OUS)
227ea906c41SOllivier Robert #endif
228ea906c41SOllivier Robert 
229ea906c41SOllivier Robert #ifndef HAVE_INT8_T
230ea906c41SOllivier Robert   typedef signed char       int8_t;
231ea906c41SOllivier Robert #endif
232ea906c41SOllivier Robert #ifndef HAVE_UINT8_T
233ea906c41SOllivier Robert   typedef unsigned char     uint8_t;
234ea906c41SOllivier Robert #endif
235ea906c41SOllivier Robert #ifndef HAVE_INT16_T
236ea906c41SOllivier Robert   typedef signed short      int16_t;
237ea906c41SOllivier Robert #endif
238ea906c41SOllivier Robert #ifndef HAVE_UINT16_T
239ea906c41SOllivier Robert   typedef unsigned short    uint16_t;
240ea906c41SOllivier Robert #endif
241ea906c41SOllivier Robert #ifndef HAVE_UINT_T
242ea906c41SOllivier Robert   typedef unsigned int      uint_t;
243ea906c41SOllivier Robert #endif
244ea906c41SOllivier Robert 
245ea906c41SOllivier Robert #ifndef HAVE_INT32_T
246ea906c41SOllivier Robert # if SIZEOF_INT == 4
247ea906c41SOllivier Robert         typedef signed int      int32_t;
248ea906c41SOllivier Robert # elif SIZEOF_LONG == 4
249ea906c41SOllivier Robert         typedef signed long     int32_t;
250ea906c41SOllivier Robert # endif
251ea906c41SOllivier Robert #endif
252ea906c41SOllivier Robert 
253ea906c41SOllivier Robert #ifndef HAVE_UINT32_T
254ea906c41SOllivier Robert # if SIZEOF_INT == 4
255ea906c41SOllivier Robert         typedef unsigned int    uint32_t;
256ea906c41SOllivier Robert # elif SIZEOF_LONG == 4
257ea906c41SOllivier Robert         typedef unsigned long   uint32_t;
258ea906c41SOllivier Robert # else
259ea906c41SOllivier Robert #   error Cannot create a uint32_t type.
260ea906c41SOllivier Robert     Choke Me.
261ea906c41SOllivier Robert # endif
262ea906c41SOllivier Robert #endif
263ea906c41SOllivier Robert 
264ea906c41SOllivier Robert #ifndef HAVE_INTPTR_T
265ea906c41SOllivier Robert   typedef signed long   intptr_t;
266ea906c41SOllivier Robert #endif
267ea906c41SOllivier Robert #ifndef HAVE_UINTPTR_T
268ea906c41SOllivier Robert   typedef unsigned long uintptr_t;
269ea906c41SOllivier Robert #endif
270ea906c41SOllivier Robert 
271ea906c41SOllivier Robert /* redefine these for BSD style string libraries */
272ea906c41SOllivier Robert #ifndef HAVE_STRCHR
273ea906c41SOllivier Robert #  define strchr        index
274ea906c41SOllivier Robert #  define strrchr       rindex
275ea906c41SOllivier Robert #endif
276ea906c41SOllivier Robert 
277ea906c41SOllivier Robert #ifdef USE_FOPEN_BINARY
278ea906c41SOllivier Robert #  ifndef FOPEN_BINARY_FLAG
279ea906c41SOllivier Robert #    define FOPEN_BINARY_FLAG   "b"
280ea906c41SOllivier Robert #  endif
281ea906c41SOllivier Robert #  ifndef FOPEN_TEXT_FLAG
282ea906c41SOllivier Robert #    define FOPEN_TEXT_FLAG     "t"
283ea906c41SOllivier Robert #  endif
284ea906c41SOllivier Robert #else
285ea906c41SOllivier Robert #  ifndef FOPEN_BINARY_FLAG
286ea906c41SOllivier Robert #    define FOPEN_BINARY_FLAG
287ea906c41SOllivier Robert #  endif
288ea906c41SOllivier Robert #  ifndef FOPEN_TEXT_FLAG
289ea906c41SOllivier Robert #    define FOPEN_TEXT_FLAG
290ea906c41SOllivier Robert #  endif
291ea906c41SOllivier Robert #endif
292ea906c41SOllivier Robert 
293ea906c41SOllivier Robert #ifndef STR
294ea906c41SOllivier Robert #  define _STR(s) #s
295ea906c41SOllivier Robert #  define STR(s)  _STR(s)
296ea906c41SOllivier Robert #endif
297ea906c41SOllivier Robert 
298ea906c41SOllivier Robert /* ##### Pointer sized word ##### */
299ea906c41SOllivier Robert 
300ea906c41SOllivier Robert /* FIXME:  the MAX stuff in here is broken! */
301ea906c41SOllivier Robert #if SIZEOF_CHARP > SIZEOF_INT
302ea906c41SOllivier Robert    typedef long t_word;
303ea906c41SOllivier Robert    #define WORD_MAX  LONG_MAX
304ea906c41SOllivier Robert    #define WORD_MIN  LONG_MIN
305ea906c41SOllivier Robert #else /* SIZEOF_CHARP <= SIZEOF_INT */
306ea906c41SOllivier Robert    typedef int t_word;
307ea906c41SOllivier Robert    #define WORD_MAX  INT_MAX
308ea906c41SOllivier Robert    #define WORD_MIN  INT_MIN
309ea906c41SOllivier Robert #endif
310ea906c41SOllivier Robert 
311ea906c41SOllivier Robert #endif /* COMPAT_H_GUARD */
312ea906c41SOllivier Robert 
313ea906c41SOllivier Robert /*
314ea906c41SOllivier Robert  * Local Variables:
315ea906c41SOllivier Robert  * mode: C
316ea906c41SOllivier Robert  * c-file-style: "stroustrup"
317ea906c41SOllivier Robert  * indent-tabs-mode: nil
318ea906c41SOllivier Robert  * End:
319ea906c41SOllivier Robert  * end of compat/compat.h */
320