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