xref: /minix3/external/bsd/tcpdump/dist/tcpdump-stdinc.h (revision b636d99d91c3d54204248f643c14627405d4afd1)
1*b636d99dSDavid van Moolenbroek /*
2*b636d99dSDavid van Moolenbroek  * Copyright (c) 2002 - 2003
3*b636d99dSDavid van Moolenbroek  * NetGroup, Politecnico di Torino (Italy)
4*b636d99dSDavid van Moolenbroek  * All rights reserved.
5*b636d99dSDavid van Moolenbroek  *
6*b636d99dSDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
7*b636d99dSDavid van Moolenbroek  * modification, are permitted provided that the following conditions
8*b636d99dSDavid van Moolenbroek  * are met:
9*b636d99dSDavid van Moolenbroek  *
10*b636d99dSDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
11*b636d99dSDavid van Moolenbroek  * notice, this list of conditions and the following disclaimer.
12*b636d99dSDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
13*b636d99dSDavid van Moolenbroek  * notice, this list of conditions and the following disclaimer in the
14*b636d99dSDavid van Moolenbroek  * documentation and/or other materials provided with the distribution.
15*b636d99dSDavid van Moolenbroek  * 3. Neither the name of the Politecnico di Torino nor the names of its
16*b636d99dSDavid van Moolenbroek  * contributors may be used to endorse or promote products derived from
17*b636d99dSDavid van Moolenbroek  * this software without specific prior written permission.
18*b636d99dSDavid van Moolenbroek  *
19*b636d99dSDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20*b636d99dSDavid van Moolenbroek  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21*b636d99dSDavid van Moolenbroek  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22*b636d99dSDavid van Moolenbroek  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23*b636d99dSDavid van Moolenbroek  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24*b636d99dSDavid van Moolenbroek  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25*b636d99dSDavid van Moolenbroek  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26*b636d99dSDavid van Moolenbroek  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27*b636d99dSDavid van Moolenbroek  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28*b636d99dSDavid van Moolenbroek  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29*b636d99dSDavid van Moolenbroek  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*b636d99dSDavid van Moolenbroek  */
31*b636d99dSDavid van Moolenbroek 
32*b636d99dSDavid van Moolenbroek /*
33*b636d99dSDavid van Moolenbroek  * Include the appropriate OS header files on Windows and various flavors
34*b636d99dSDavid van Moolenbroek  * of UNIX, include various non-OS header files on Windows, and define
35*b636d99dSDavid van Moolenbroek  * various items as needed, to isolate most of tcpdump's platform
36*b636d99dSDavid van Moolenbroek  * differences to this one file.
37*b636d99dSDavid van Moolenbroek  */
38*b636d99dSDavid van Moolenbroek 
39*b636d99dSDavid van Moolenbroek #ifndef tcpdump_stdinc_h
40*b636d99dSDavid van Moolenbroek #define tcpdump_stdinc_h
41*b636d99dSDavid van Moolenbroek 
42*b636d99dSDavid van Moolenbroek #include <errno.h>
43*b636d99dSDavid van Moolenbroek 
44*b636d99dSDavid van Moolenbroek #ifdef WIN32
45*b636d99dSDavid van Moolenbroek 
46*b636d99dSDavid van Moolenbroek #include <stdint.h>
47*b636d99dSDavid van Moolenbroek #include <stdio.h>
48*b636d99dSDavid van Moolenbroek #include <winsock2.h>
49*b636d99dSDavid van Moolenbroek #include <ws2tcpip.h>
50*b636d99dSDavid van Moolenbroek #include "bittypes.h"   /* in wpcap's Win32/include */
51*b636d99dSDavid van Moolenbroek #include <ctype.h>
52*b636d99dSDavid van Moolenbroek #include <time.h>
53*b636d99dSDavid van Moolenbroek #include <io.h>
54*b636d99dSDavid van Moolenbroek #include <fcntl.h>
55*b636d99dSDavid van Moolenbroek #include <sys/types.h>
56*b636d99dSDavid van Moolenbroek #include <net/netdb.h>  /* in wpcap's Win32/include */
57*b636d99dSDavid van Moolenbroek 
58*b636d99dSDavid van Moolenbroek #ifndef uint8_t
59*b636d99dSDavid van Moolenbroek #define uint8_t		unsigned char
60*b636d99dSDavid van Moolenbroek #endif
61*b636d99dSDavid van Moolenbroek 
62*b636d99dSDavid van Moolenbroek #ifndef int8_t
63*b636d99dSDavid van Moolenbroek #define int8_t		signed char
64*b636d99dSDavid van Moolenbroek #endif
65*b636d99dSDavid van Moolenbroek 
66*b636d99dSDavid van Moolenbroek #ifndef uint16_t
67*b636d99dSDavid van Moolenbroek #define uint16_t	unsigned short
68*b636d99dSDavid van Moolenbroek #endif
69*b636d99dSDavid van Moolenbroek 
70*b636d99dSDavid van Moolenbroek #ifndef int16_t
71*b636d99dSDavid van Moolenbroek #define int16_t		signed short
72*b636d99dSDavid van Moolenbroek #endif
73*b636d99dSDavid van Moolenbroek 
74*b636d99dSDavid van Moolenbroek #ifndef uint32_t
75*b636d99dSDavid van Moolenbroek #define uint32_t	unsigned int
76*b636d99dSDavid van Moolenbroek #endif
77*b636d99dSDavid van Moolenbroek 
78*b636d99dSDavid van Moolenbroek #ifndef int32_t
79*b636d99dSDavid van Moolenbroek #define int32_t		signed int
80*b636d99dSDavid van Moolenbroek #endif
81*b636d99dSDavid van Moolenbroek 
82*b636d99dSDavid van Moolenbroek #ifdef _MSC_EXTENSIONS
83*b636d99dSDavid van Moolenbroek 
84*b636d99dSDavid van Moolenbroek #ifndef uint64_t
85*b636d99dSDavid van Moolenbroek #define uint64_t	unsigned _int64
86*b636d99dSDavid van Moolenbroek #endif
87*b636d99dSDavid van Moolenbroek 
88*b636d99dSDavid van Moolenbroek #ifndef int64_t
89*b636d99dSDavid van Moolenbroek #define int64_t		_int64
90*b636d99dSDavid van Moolenbroek #endif
91*b636d99dSDavid van Moolenbroek 
92*b636d99dSDavid van Moolenbroek #ifndef PRId64
93*b636d99dSDavid van Moolenbroek #define PRId64		"I64d"
94*b636d99dSDavid van Moolenbroek #endif
95*b636d99dSDavid van Moolenbroek 
96*b636d99dSDavid van Moolenbroek #ifndef PRIo64
97*b636d99dSDavid van Moolenbroek #define PRIo64		"I64o"
98*b636d99dSDavid van Moolenbroek #endif
99*b636d99dSDavid van Moolenbroek 
100*b636d99dSDavid van Moolenbroek #ifndef PRIu64
101*b636d99dSDavid van Moolenbroek #define PRIu64		"I64u"
102*b636d99dSDavid van Moolenbroek #endif
103*b636d99dSDavid van Moolenbroek 
104*b636d99dSDavid van Moolenbroek #ifndef PRIx64
105*b636d99dSDavid van Moolenbroek #define PRIx64		"I64x"
106*b636d99dSDavid van Moolenbroek #endif
107*b636d99dSDavid van Moolenbroek 
108*b636d99dSDavid van Moolenbroek #else /* _MSC_EXTENSIONS */
109*b636d99dSDavid van Moolenbroek 
110*b636d99dSDavid van Moolenbroek #ifndef uint64_t
111*b636d99dSDavid van Moolenbroek #define uint64_t	unsigned long long
112*b636d99dSDavid van Moolenbroek #endif
113*b636d99dSDavid van Moolenbroek 
114*b636d99dSDavid van Moolenbroek #ifndef int64_t
115*b636d99dSDavid van Moolenbroek #define int64_t		long long
116*b636d99dSDavid van Moolenbroek #endif
117*b636d99dSDavid van Moolenbroek 
118*b636d99dSDavid van Moolenbroek #ifndef PRId64
119*b636d99dSDavid van Moolenbroek #define PRId64		"lld"
120*b636d99dSDavid van Moolenbroek #endif
121*b636d99dSDavid van Moolenbroek 
122*b636d99dSDavid van Moolenbroek #ifndef PRIo64
123*b636d99dSDavid van Moolenbroek #define PRIo64		"llo"
124*b636d99dSDavid van Moolenbroek #endif
125*b636d99dSDavid van Moolenbroek 
126*b636d99dSDavid van Moolenbroek #ifndef PRIu64
127*b636d99dSDavid van Moolenbroek #define PRIu64		"llu"
128*b636d99dSDavid van Moolenbroek #endif
129*b636d99dSDavid van Moolenbroek 
130*b636d99dSDavid van Moolenbroek #ifndef PRIx64
131*b636d99dSDavid van Moolenbroek #define PRIx64		"llx"
132*b636d99dSDavid van Moolenbroek #endif
133*b636d99dSDavid van Moolenbroek 
134*b636d99dSDavid van Moolenbroek #endif /* _MSC_EXTENSIONS */
135*b636d99dSDavid van Moolenbroek 
136*b636d99dSDavid van Moolenbroek #ifdef _MSC_VER
137*b636d99dSDavid van Moolenbroek #define stat _stat
138*b636d99dSDavid van Moolenbroek #define open _open
139*b636d99dSDavid van Moolenbroek #define fstat _fstat
140*b636d99dSDavid van Moolenbroek #define read _read
141*b636d99dSDavid van Moolenbroek #define close _close
142*b636d99dSDavid van Moolenbroek #define O_RDONLY _O_RDONLY
143*b636d99dSDavid van Moolenbroek #endif  /* _MSC_VER */
144*b636d99dSDavid van Moolenbroek 
145*b636d99dSDavid van Moolenbroek /* Protos for missing/x.c functions (ideally <missing/addrinfo.h>
146*b636d99dSDavid van Moolenbroek  * should be used, but it clashes with <ws2tcpip.h>).
147*b636d99dSDavid van Moolenbroek  */
148*b636d99dSDavid van Moolenbroek extern const char *inet_ntop (int, const void *, char *, size_t);
149*b636d99dSDavid van Moolenbroek extern int inet_pton (int, const char *, void *);
150*b636d99dSDavid van Moolenbroek extern int inet_aton (const char *cp, struct in_addr *addr);
151*b636d99dSDavid van Moolenbroek 
152*b636d99dSDavid van Moolenbroek /*
153*b636d99dSDavid van Moolenbroek  * With MSVC, for C, __inline is used to make a function an inline.
154*b636d99dSDavid van Moolenbroek  */
155*b636d99dSDavid van Moolenbroek #ifdef _MSC_VER
156*b636d99dSDavid van Moolenbroek #define inline __inline
157*b636d99dSDavid van Moolenbroek #endif
158*b636d99dSDavid van Moolenbroek 
159*b636d99dSDavid van Moolenbroek #ifndef INET6_ADDRSTRLEN
160*b636d99dSDavid van Moolenbroek #define INET6_ADDRSTRLEN 46
161*b636d99dSDavid van Moolenbroek #endif
162*b636d99dSDavid van Moolenbroek 
163*b636d99dSDavid van Moolenbroek /* It is in MSVC's <errno.h>, but not defined in MingW+Watcom.
164*b636d99dSDavid van Moolenbroek  */
165*b636d99dSDavid van Moolenbroek #ifndef EAFNOSUPPORT
166*b636d99dSDavid van Moolenbroek #define EAFNOSUPPORT WSAEAFNOSUPPORT
167*b636d99dSDavid van Moolenbroek #endif
168*b636d99dSDavid van Moolenbroek 
169*b636d99dSDavid van Moolenbroek #ifndef caddr_t
170*b636d99dSDavid van Moolenbroek typedef char* caddr_t;
171*b636d99dSDavid van Moolenbroek #endif /* caddr_t */
172*b636d99dSDavid van Moolenbroek 
173*b636d99dSDavid van Moolenbroek #define MAXHOSTNAMELEN	64
174*b636d99dSDavid van Moolenbroek #define	NI_MAXHOST	1025
175*b636d99dSDavid van Moolenbroek #define snprintf _snprintf
176*b636d99dSDavid van Moolenbroek #define vsnprintf _vsnprintf
177*b636d99dSDavid van Moolenbroek #define RETSIGTYPE void
178*b636d99dSDavid van Moolenbroek 
179*b636d99dSDavid van Moolenbroek #else /* WIN32 */
180*b636d99dSDavid van Moolenbroek 
181*b636d99dSDavid van Moolenbroek #include <ctype.h>
182*b636d99dSDavid van Moolenbroek #include <unistd.h>
183*b636d99dSDavid van Moolenbroek #include <netdb.h>
184*b636d99dSDavid van Moolenbroek #if HAVE_INTTYPES_H
185*b636d99dSDavid van Moolenbroek #include <inttypes.h>
186*b636d99dSDavid van Moolenbroek #elif HAVE_STDINT_H
187*b636d99dSDavid van Moolenbroek #include <stdint.h>
188*b636d99dSDavid van Moolenbroek #endif
189*b636d99dSDavid van Moolenbroek #include <sys/param.h>
190*b636d99dSDavid van Moolenbroek #include <sys/types.h>			/* concession to AIX */
191*b636d99dSDavid van Moolenbroek #include <sys/time.h>
192*b636d99dSDavid van Moolenbroek #include <sys/socket.h>
193*b636d99dSDavid van Moolenbroek #include <netinet/in.h>
194*b636d99dSDavid van Moolenbroek 
195*b636d99dSDavid van Moolenbroek #ifdef TIME_WITH_SYS_TIME
196*b636d99dSDavid van Moolenbroek #include <time.h>
197*b636d99dSDavid van Moolenbroek #endif
198*b636d99dSDavid van Moolenbroek 
199*b636d99dSDavid van Moolenbroek #include <arpa/inet.h>
200*b636d99dSDavid van Moolenbroek 
201*b636d99dSDavid van Moolenbroek #endif /* WIN32 */
202*b636d99dSDavid van Moolenbroek 
203*b636d99dSDavid van Moolenbroek #ifndef HAVE___ATTRIBUTE__
204*b636d99dSDavid van Moolenbroek #define __attribute__(x)
205*b636d99dSDavid van Moolenbroek #endif
206*b636d99dSDavid van Moolenbroek 
207*b636d99dSDavid van Moolenbroek /*
208*b636d99dSDavid van Moolenbroek  * Used to declare a structure unaligned, so that the C compiler,
209*b636d99dSDavid van Moolenbroek  * if necessary, generates code that doesn't assume alignment.
210*b636d99dSDavid van Moolenbroek  * This is required because there is no guarantee that the packet
211*b636d99dSDavid van Moolenbroek  * data we get from libpcap/WinPcap is properly aligned.
212*b636d99dSDavid van Moolenbroek  *
213*b636d99dSDavid van Moolenbroek  * This assumes that, for all compilers that support __attribute__:
214*b636d99dSDavid van Moolenbroek  *
215*b636d99dSDavid van Moolenbroek  *	1) they support __attribute__((packed));
216*b636d99dSDavid van Moolenbroek  *
217*b636d99dSDavid van Moolenbroek  *	2) for all instruction set architectures requiring strict
218*b636d99dSDavid van Moolenbroek  *	   alignment, declaring a structure with that attribute
219*b636d99dSDavid van Moolenbroek  *	   causes the compiler to generate code that handles
220*b636d99dSDavid van Moolenbroek  *	   misaligned 2-byte, 4-byte, and 8-byte integral
221*b636d99dSDavid van Moolenbroek  *	   quantities.
222*b636d99dSDavid van Moolenbroek  *
223*b636d99dSDavid van Moolenbroek  * It does not (yet) handle compilers where you can get the compiler
224*b636d99dSDavid van Moolenbroek  * to generate code of that sort by some other means.
225*b636d99dSDavid van Moolenbroek  *
226*b636d99dSDavid van Moolenbroek  * This is required in order to, for example, keep the compiler from
227*b636d99dSDavid van Moolenbroek  * generating, for
228*b636d99dSDavid van Moolenbroek  *
229*b636d99dSDavid van Moolenbroek  *	if (bp->bp_htype == 1 && bp->bp_hlen == 6 && bp->bp_op == BOOTPREQUEST) {
230*b636d99dSDavid van Moolenbroek  *
231*b636d99dSDavid van Moolenbroek  * in print-bootp.c, code that loads the first 4-byte word of a
232*b636d99dSDavid van Moolenbroek  * "struct bootp", masking out the bp_hops field, and comparing the result
233*b636d99dSDavid van Moolenbroek  * against 0x01010600.
234*b636d99dSDavid van Moolenbroek  *
235*b636d99dSDavid van Moolenbroek  * Note: this also requires that padding be put into the structure,
236*b636d99dSDavid van Moolenbroek  * at least for compilers where it's implemented as __attribute__((packed)).
237*b636d99dSDavid van Moolenbroek  */
238*b636d99dSDavid van Moolenbroek #if !(defined(_MSC_VER) && defined(UNALIGNED))
239*b636d99dSDavid van Moolenbroek /* MSVC may have its own macro defined with the same name and purpose. */
240*b636d99dSDavid van Moolenbroek #undef UNALIGNED
241*b636d99dSDavid van Moolenbroek #define UNALIGNED	__attribute__((packed))
242*b636d99dSDavid van Moolenbroek #endif
243*b636d99dSDavid van Moolenbroek 
244*b636d99dSDavid van Moolenbroek #if defined(WIN32) || defined(MSDOS)
245*b636d99dSDavid van Moolenbroek   #define FOPEN_READ_TXT   "rt"
246*b636d99dSDavid van Moolenbroek   #define FOPEN_READ_BIN   "rb"
247*b636d99dSDavid van Moolenbroek   #define FOPEN_WRITE_TXT  "wt"
248*b636d99dSDavid van Moolenbroek   #define FOPEN_WRITE_BIN  "wb"
249*b636d99dSDavid van Moolenbroek #else
250*b636d99dSDavid van Moolenbroek   #define FOPEN_READ_TXT   "r"
251*b636d99dSDavid van Moolenbroek   #define FOPEN_READ_BIN   FOPEN_READ_TXT
252*b636d99dSDavid van Moolenbroek   #define FOPEN_WRITE_TXT  "w"
253*b636d99dSDavid van Moolenbroek   #define FOPEN_WRITE_BIN  FOPEN_WRITE_TXT
254*b636d99dSDavid van Moolenbroek #endif
255*b636d99dSDavid van Moolenbroek 
256*b636d99dSDavid van Moolenbroek #if defined(__GNUC__) && defined(__i386__) && !defined(__APPLE__) && !defined(__ntohl)
257*b636d99dSDavid van Moolenbroek   #undef ntohl
258*b636d99dSDavid van Moolenbroek   #undef ntohs
259*b636d99dSDavid van Moolenbroek   #undef htonl
260*b636d99dSDavid van Moolenbroek   #undef htons
261*b636d99dSDavid van Moolenbroek 
262*b636d99dSDavid van Moolenbroek   static __inline__ unsigned int __ntohl (unsigned int x);
263*b636d99dSDavid van Moolenbroek   static __inline__ unsigned short __ntohs (unsigned short x);
264*b636d99dSDavid van Moolenbroek 
265*b636d99dSDavid van Moolenbroek   #define ntohl(x)  __ntohl(x)
266*b636d99dSDavid van Moolenbroek   #define ntohs(x)  __ntohs(x)
267*b636d99dSDavid van Moolenbroek   #define htonl(x)  __ntohl(x)
268*b636d99dSDavid van Moolenbroek   #define htons(x)  __ntohs(x)
269*b636d99dSDavid van Moolenbroek 
__ntohl(unsigned int x)270*b636d99dSDavid van Moolenbroek   static __inline__ unsigned int __ntohl (unsigned int x)
271*b636d99dSDavid van Moolenbroek   {
272*b636d99dSDavid van Moolenbroek     __asm__ ("xchgb %b0, %h0\n\t"   /* swap lower bytes  */
273*b636d99dSDavid van Moolenbroek              "rorl  $16, %0\n\t"    /* swap words        */
274*b636d99dSDavid van Moolenbroek              "xchgb %b0, %h0"       /* swap higher bytes */
275*b636d99dSDavid van Moolenbroek             : "=q" (x) : "0" (x));
276*b636d99dSDavid van Moolenbroek     return (x);
277*b636d99dSDavid van Moolenbroek   }
278*b636d99dSDavid van Moolenbroek 
__ntohs(unsigned short x)279*b636d99dSDavid van Moolenbroek   static __inline__ unsigned short __ntohs (unsigned short x)
280*b636d99dSDavid van Moolenbroek   {
281*b636d99dSDavid van Moolenbroek     __asm__ ("xchgb %b0, %h0"       /* swap bytes */
282*b636d99dSDavid van Moolenbroek             : "=q" (x) : "0" (x));
283*b636d99dSDavid van Moolenbroek     return (x);
284*b636d99dSDavid van Moolenbroek   }
285*b636d99dSDavid van Moolenbroek #endif
286*b636d99dSDavid van Moolenbroek 
287*b636d99dSDavid van Moolenbroek #ifndef INET_ADDRSTRLEN
288*b636d99dSDavid van Moolenbroek #define INET_ADDRSTRLEN 16
289*b636d99dSDavid van Moolenbroek #endif
290*b636d99dSDavid van Moolenbroek 
291*b636d99dSDavid van Moolenbroek #ifndef TRUE
292*b636d99dSDavid van Moolenbroek #define TRUE 1
293*b636d99dSDavid van Moolenbroek #endif
294*b636d99dSDavid van Moolenbroek 
295*b636d99dSDavid van Moolenbroek #ifndef FALSE
296*b636d99dSDavid van Moolenbroek #define FALSE 0
297*b636d99dSDavid van Moolenbroek #endif
298*b636d99dSDavid van Moolenbroek 
299*b636d99dSDavid van Moolenbroek /*
300*b636d99dSDavid van Moolenbroek  * The Apple deprecation workaround macros below were adopted from the
301*b636d99dSDavid van Moolenbroek  * FreeRADIUS server code under permission of Alan DeKok and Arran Cudbard-Bell.
302*b636d99dSDavid van Moolenbroek  */
303*b636d99dSDavid van Moolenbroek 
304*b636d99dSDavid van Moolenbroek #define XSTRINGIFY(x) #x
305*b636d99dSDavid van Moolenbroek 
306*b636d99dSDavid van Moolenbroek /*
307*b636d99dSDavid van Moolenbroek  *	Macros for controlling warnings in GCC >= 4.2 and clang >= 2.8
308*b636d99dSDavid van Moolenbroek  */
309*b636d99dSDavid van Moolenbroek #define DIAG_JOINSTR(x,y) XSTRINGIFY(x ## y)
310*b636d99dSDavid van Moolenbroek #define DIAG_DO_PRAGMA(x) _Pragma (#x)
311*b636d99dSDavid van Moolenbroek 
312*b636d99dSDavid van Moolenbroek #if defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 402
313*b636d99dSDavid van Moolenbroek #  define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(GCC diagnostic x)
314*b636d99dSDavid van Moolenbroek #  if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406
315*b636d99dSDavid van Moolenbroek #    define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x))
316*b636d99dSDavid van Moolenbroek #    define DIAG_ON(x) DIAG_PRAGMA(pop)
317*b636d99dSDavid van Moolenbroek #  else
318*b636d99dSDavid van Moolenbroek #    define DIAG_OFF(x) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x))
319*b636d99dSDavid van Moolenbroek #    define DIAG_ON(x)  DIAG_PRAGMA(warning DIAG_JOINSTR(-W,x))
320*b636d99dSDavid van Moolenbroek #  endif
321*b636d99dSDavid van Moolenbroek #elif defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__ >= 208)
322*b636d99dSDavid van Moolenbroek #  define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(clang diagnostic x)
323*b636d99dSDavid van Moolenbroek #  define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x))
324*b636d99dSDavid van Moolenbroek #  define DIAG_ON(x) DIAG_PRAGMA(pop)
325*b636d99dSDavid van Moolenbroek #else
326*b636d99dSDavid van Moolenbroek #  define DIAG_OFF(x)
327*b636d99dSDavid van Moolenbroek #  define DIAG_ON(x)
328*b636d99dSDavid van Moolenbroek #endif
329*b636d99dSDavid van Moolenbroek 
330*b636d99dSDavid van Moolenbroek /*
331*b636d99dSDavid van Moolenbroek  *	For dealing with APIs which are only deprecated in OSX (like the OpenSSL API)
332*b636d99dSDavid van Moolenbroek  */
333*b636d99dSDavid van Moolenbroek #ifdef __APPLE__
334*b636d99dSDavid van Moolenbroek #  define USES_APPLE_DEPRECATED_API DIAG_OFF(deprecated-declarations)
335*b636d99dSDavid van Moolenbroek #  define USES_APPLE_RST DIAG_ON(deprecated-declarations)
336*b636d99dSDavid van Moolenbroek #else
337*b636d99dSDavid van Moolenbroek #  define USES_APPLE_DEPRECATED_API
338*b636d99dSDavid van Moolenbroek #  define USES_APPLE_RST
339*b636d99dSDavid van Moolenbroek #endif
340*b636d99dSDavid van Moolenbroek 
341*b636d99dSDavid van Moolenbroek /*
342*b636d99dSDavid van Moolenbroek  * end of Apple deprecation workaround macros
343*b636d99dSDavid van Moolenbroek  */
344*b636d99dSDavid van Moolenbroek 
345*b636d99dSDavid van Moolenbroek #ifndef min
346*b636d99dSDavid van Moolenbroek #define min(a,b) ((a)>(b)?(b):(a))
347*b636d99dSDavid van Moolenbroek #endif
348*b636d99dSDavid van Moolenbroek #ifndef max
349*b636d99dSDavid van Moolenbroek #define max(a,b) ((b)>(a)?(b):(a))
350*b636d99dSDavid van Moolenbroek #endif
351*b636d99dSDavid van Moolenbroek 
352*b636d99dSDavid van Moolenbroek #endif /* tcpdump_stdinc_h */
353