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