1 /*
2  * Copyright (c) 2002 - 2005 NetGroup, Politecnico di Torino (Italy)
3  * Copyright (c) 2005 - 2009 CACE Technologies, Inc. Davis (California)
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the Politecnico di Torino nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 #ifndef pcap_pcap_inttypes_h
32 #define pcap_pcap_inttypes_h
33 
34 /*
35  * Get the integer types and PRi[doux]64 values from C99 <inttypes.h>
36  * defined, by hook or by crook.
37  */
38 #if defined(_MSC_VER)
39   /*
40    * Compiler is MSVC.
41    */
42   #if _MSC_VER >= 1800
43     /*
44      * VS 2013 or newer; we have <inttypes.h>.
45      */
46     #include <inttypes.h>
47   #else
48     /*
49      * Earlier VS; we have to define this stuff ourselves.
50      */
51     typedef unsigned char uint8_t;
52     typedef signed char int8_t;
53     typedef unsigned short uint16_t;
54     typedef signed short int16_t;
55     typedef unsigned int uint32_t;
56     typedef signed int int32_t;
57     #ifdef _MSC_EXTENSIONS
58       typedef unsigned _int64 uint64_t;
59       typedef _int64 int64_t;
60     #else /* _MSC_EXTENSIONS */
61       typedef unsigned long long uint64_t;
62       typedef long long int64_t;
63     #endif
64   #endif
65 
66   /*
67    * These may be defined by <inttypes.h>.
68    *
69    * XXX - for MSVC, we always want the _MSC_EXTENSIONS versions.
70    * What about other compilers?  If, as the MinGW Web site says MinGW
71    * does, the other compilers just use Microsoft's run-time library,
72    * then they should probably use the _MSC_EXTENSIONS even if the
73    * compiler doesn't define _MSC_EXTENSIONS.
74    *
75    * XXX - we currently aren't using any of these, but this allows
76    * their use in the future.
77    */
78   #ifndef PRId64
79     #ifdef _MSC_EXTENSIONS
80       #define PRId64	"I64d"
81     #else
82       #define PRId64	"lld"
83     #endif
84   #endif /* PRId64 */
85 
86   #ifndef PRIo64
87     #ifdef _MSC_EXTENSIONS
88       #define PRIo64	"I64o"
89     #else
90       #define PRIo64	"llo"
91     #endif
92   #endif /* PRIo64 */
93 
94   #ifndef PRIx64
95     #ifdef _MSC_EXTENSIONS
96       #define PRIx64	"I64x"
97     #else
98       #define PRIx64	"llx"
99     #endif
100   #endif
101 
102   #ifndef PRIu64
103     #ifdef _MSC_EXTENSIONS
104       #define PRIu64	"I64u"
105     #else
106       #define PRIu64	"llu"
107     #endif
108   #endif
109 
110   /*
111    * MSVC's support library doesn't support %zu to print a size_t until
112    * Visual Studio 2017, but supports %Iu earlier, so use that.
113    */
114   #define PRIsize	"Iu"
115 #elif defined(__MINGW32__) || !defined(_WIN32)
116   /*
117    * Compiler is MinGW or target is UN*X or MS-DOS.  Just use
118    * <inttypes.h>.
119    */
120   #include <inttypes.h>
121 
122   /*
123    * Assume the support library supports %zu; it's required by C99.
124    */
125   #define PRIsize	"zu"
126 #endif
127 
128 #endif /* pcap/pcap-inttypes.h */
129