xref: /Universal-ctags/gnulib/stdint.in.h (revision 820c1a8d46849a90376d8eb15b319ac05439f656)
1*820c1a8dSHiroo HAYASHI /* Copyright (C) 2001-2002, 2004-2021 Free Software Foundation, Inc.
2*820c1a8dSHiroo HAYASHI    Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
3*820c1a8dSHiroo HAYASHI    This file is part of gnulib.
4*820c1a8dSHiroo HAYASHI 
5*820c1a8dSHiroo HAYASHI    This file is free software: you can redistribute it and/or modify
6*820c1a8dSHiroo HAYASHI    it under the terms of the GNU Lesser General Public License as
7*820c1a8dSHiroo HAYASHI    published by the Free Software Foundation; either version 2.1 of the
8*820c1a8dSHiroo HAYASHI    License, or (at your option) any later version.
9*820c1a8dSHiroo HAYASHI 
10*820c1a8dSHiroo HAYASHI    This file is distributed in the hope that it will be useful,
11*820c1a8dSHiroo HAYASHI    but WITHOUT ANY WARRANTY; without even the implied warranty of
12*820c1a8dSHiroo HAYASHI    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*820c1a8dSHiroo HAYASHI    GNU Lesser General Public License for more details.
14*820c1a8dSHiroo HAYASHI 
15*820c1a8dSHiroo HAYASHI    You should have received a copy of the GNU Lesser General Public License
16*820c1a8dSHiroo HAYASHI    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
17*820c1a8dSHiroo HAYASHI 
18*820c1a8dSHiroo HAYASHI /*
19*820c1a8dSHiroo HAYASHI  * ISO C 99 <stdint.h> for platforms that lack it.
20*820c1a8dSHiroo HAYASHI  * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html>
21*820c1a8dSHiroo HAYASHI  */
22*820c1a8dSHiroo HAYASHI 
23*820c1a8dSHiroo HAYASHI #ifndef _@GUARD_PREFIX@_STDINT_H
24*820c1a8dSHiroo HAYASHI 
25*820c1a8dSHiroo HAYASHI #if __GNUC__ >= 3
26*820c1a8dSHiroo HAYASHI @PRAGMA_SYSTEM_HEADER@
27*820c1a8dSHiroo HAYASHI #endif
28*820c1a8dSHiroo HAYASHI @PRAGMA_COLUMNS@
29*820c1a8dSHiroo HAYASHI 
30*820c1a8dSHiroo HAYASHI /* When including a system file that in turn includes <inttypes.h>,
31*820c1a8dSHiroo HAYASHI    use the system <inttypes.h>, not our substitute.  This avoids
32*820c1a8dSHiroo HAYASHI    problems with (for example) VMS, whose <sys/bitypes.h> includes
33*820c1a8dSHiroo HAYASHI    <inttypes.h>.  */
34*820c1a8dSHiroo HAYASHI #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
35*820c1a8dSHiroo HAYASHI 
36*820c1a8dSHiroo HAYASHI /* On Android (Bionic libc), <sys/types.h> includes this file before
37*820c1a8dSHiroo HAYASHI    having defined 'time_t'.  Therefore in this case avoid including
38*820c1a8dSHiroo HAYASHI    other system header files; just include the system's <stdint.h>.
39*820c1a8dSHiroo HAYASHI    Ideally we should test __BIONIC__ here, but it is only defined after
40*820c1a8dSHiroo HAYASHI    <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
41*820c1a8dSHiroo HAYASHI #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H
42*820c1a8dSHiroo HAYASHI # @INCLUDE_NEXT@ @NEXT_STDINT_H@
43*820c1a8dSHiroo HAYASHI #else
44*820c1a8dSHiroo HAYASHI 
45*820c1a8dSHiroo HAYASHI /* Get those types that are already defined in other system include
46*820c1a8dSHiroo HAYASHI    files, so that we can "#define int8_t signed char" below without
47*820c1a8dSHiroo HAYASHI    worrying about a later system include file containing a "typedef
48*820c1a8dSHiroo HAYASHI    signed char int8_t;" that will get messed up by our macro.  Our
49*820c1a8dSHiroo HAYASHI    macros should all be consistent with the system versions, except
50*820c1a8dSHiroo HAYASHI    for the "fast" types and macros, which we recommend against using
51*820c1a8dSHiroo HAYASHI    in public interfaces due to compiler differences.  */
52*820c1a8dSHiroo HAYASHI 
53*820c1a8dSHiroo HAYASHI #if @HAVE_STDINT_H@
54*820c1a8dSHiroo HAYASHI # if defined __sgi && ! defined __c99
55*820c1a8dSHiroo HAYASHI    /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
56*820c1a8dSHiroo HAYASHI       with "This header file is to be used only for c99 mode compilations"
57*820c1a8dSHiroo HAYASHI       diagnostics.  */
58*820c1a8dSHiroo HAYASHI #  define __STDINT_H__
59*820c1a8dSHiroo HAYASHI # endif
60*820c1a8dSHiroo HAYASHI 
61*820c1a8dSHiroo HAYASHI   /* Some pre-C++11 <stdint.h> implementations need this.  */
62*820c1a8dSHiroo HAYASHI # ifdef __cplusplus
63*820c1a8dSHiroo HAYASHI #  ifndef __STDC_CONSTANT_MACROS
64*820c1a8dSHiroo HAYASHI #   define __STDC_CONSTANT_MACROS 1
65*820c1a8dSHiroo HAYASHI #  endif
66*820c1a8dSHiroo HAYASHI #  ifndef __STDC_LIMIT_MACROS
67*820c1a8dSHiroo HAYASHI #   define __STDC_LIMIT_MACROS 1
68*820c1a8dSHiroo HAYASHI #  endif
69*820c1a8dSHiroo HAYASHI # endif
70*820c1a8dSHiroo HAYASHI 
71*820c1a8dSHiroo HAYASHI   /* Other systems may have an incomplete or buggy <stdint.h>.
72*820c1a8dSHiroo HAYASHI      Include it before <inttypes.h>, since any "#include <stdint.h>"
73*820c1a8dSHiroo HAYASHI      in <inttypes.h> would reinclude us, skipping our contents because
74*820c1a8dSHiroo HAYASHI      _@GUARD_PREFIX@_STDINT_H is defined.
75*820c1a8dSHiroo HAYASHI      The include_next requires a split double-inclusion guard.  */
76*820c1a8dSHiroo HAYASHI # @INCLUDE_NEXT@ @NEXT_STDINT_H@
77*820c1a8dSHiroo HAYASHI #endif
78*820c1a8dSHiroo HAYASHI 
79*820c1a8dSHiroo HAYASHI #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
80*820c1a8dSHiroo HAYASHI #define _@GUARD_PREFIX@_STDINT_H
81*820c1a8dSHiroo HAYASHI 
82*820c1a8dSHiroo HAYASHI /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
83*820c1a8dSHiroo HAYASHI    LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH.  */
84*820c1a8dSHiroo HAYASHI #include <limits.h>
85*820c1a8dSHiroo HAYASHI 
86*820c1a8dSHiroo HAYASHI /* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides
87*820c1a8dSHiroo HAYASHI    wint_t.  */
88*820c1a8dSHiroo HAYASHI #if @GNULIBHEADERS_OVERRIDE_WINT_T@
89*820c1a8dSHiroo HAYASHI # undef WINT_MIN
90*820c1a8dSHiroo HAYASHI # undef WINT_MAX
91*820c1a8dSHiroo HAYASHI # define WINT_MIN 0x0U
92*820c1a8dSHiroo HAYASHI # define WINT_MAX 0xffffffffU
93*820c1a8dSHiroo HAYASHI #endif
94*820c1a8dSHiroo HAYASHI 
95*820c1a8dSHiroo HAYASHI #if ! @HAVE_C99_STDINT_H@
96*820c1a8dSHiroo HAYASHI 
97*820c1a8dSHiroo HAYASHI /* <sys/types.h> defines some of the stdint.h types as well, on glibc,
98*820c1a8dSHiroo HAYASHI    IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
99*820c1a8dSHiroo HAYASHI    AIX 5.2 <sys/types.h> isn't needed and causes troubles.
100*820c1a8dSHiroo HAYASHI    Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
101*820c1a8dSHiroo HAYASHI    relies on the system <stdint.h> definitions, so include
102*820c1a8dSHiroo HAYASHI    <sys/types.h> after @NEXT_STDINT_H@.  */
103*820c1a8dSHiroo HAYASHI # if @HAVE_SYS_TYPES_H@ && ! defined _AIX
104*820c1a8dSHiroo HAYASHI #  include <sys/types.h>
105*820c1a8dSHiroo HAYASHI # endif
106*820c1a8dSHiroo HAYASHI 
107*820c1a8dSHiroo HAYASHI # if @HAVE_INTTYPES_H@
108*820c1a8dSHiroo HAYASHI   /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
109*820c1a8dSHiroo HAYASHI      int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
110*820c1a8dSHiroo HAYASHI      <inttypes.h> also defines intptr_t and uintptr_t.  */
111*820c1a8dSHiroo HAYASHI #  include <inttypes.h>
112*820c1a8dSHiroo HAYASHI # elif @HAVE_SYS_INTTYPES_H@
113*820c1a8dSHiroo HAYASHI   /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
114*820c1a8dSHiroo HAYASHI      the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
115*820c1a8dSHiroo HAYASHI #  include <sys/inttypes.h>
116*820c1a8dSHiroo HAYASHI # endif
117*820c1a8dSHiroo HAYASHI 
118*820c1a8dSHiroo HAYASHI # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
119*820c1a8dSHiroo HAYASHI   /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
120*820c1a8dSHiroo HAYASHI      int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
121*820c1a8dSHiroo HAYASHI      included by <sys/types.h>.  */
122*820c1a8dSHiroo HAYASHI #  include <sys/bitypes.h>
123*820c1a8dSHiroo HAYASHI # endif
124*820c1a8dSHiroo HAYASHI 
125*820c1a8dSHiroo HAYASHI # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
126*820c1a8dSHiroo HAYASHI 
127*820c1a8dSHiroo HAYASHI /* Minimum and maximum values for an integer type under the usual assumption.
128*820c1a8dSHiroo HAYASHI    Return an unspecified value if BITS == 0, adding a check to pacify
129*820c1a8dSHiroo HAYASHI    picky compilers.  */
130*820c1a8dSHiroo HAYASHI 
131*820c1a8dSHiroo HAYASHI /* These are separate macros, because if you try to merge these macros into
132*820c1a8dSHiroo HAYASHI    a single one, HP-UX cc rejects the resulting expression in constant
133*820c1a8dSHiroo HAYASHI    expressions.  */
134*820c1a8dSHiroo HAYASHI # define _STDINT_UNSIGNED_MIN(bits, zero) \
135*820c1a8dSHiroo HAYASHI     (zero)
136*820c1a8dSHiroo HAYASHI # define _STDINT_SIGNED_MIN(bits, zero) \
137*820c1a8dSHiroo HAYASHI     (~ _STDINT_MAX (1, bits, zero))
138*820c1a8dSHiroo HAYASHI 
139*820c1a8dSHiroo HAYASHI # define _STDINT_MAX(signed, bits, zero) \
140*820c1a8dSHiroo HAYASHI     (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
141*820c1a8dSHiroo HAYASHI 
142*820c1a8dSHiroo HAYASHI #if !GNULIB_defined_stdint_types
143*820c1a8dSHiroo HAYASHI 
144*820c1a8dSHiroo HAYASHI /* 7.18.1.1. Exact-width integer types */
145*820c1a8dSHiroo HAYASHI 
146*820c1a8dSHiroo HAYASHI /* Here we assume a standard architecture where the hardware integer
147*820c1a8dSHiroo HAYASHI    types have 8, 16, 32, optionally 64 bits.  */
148*820c1a8dSHiroo HAYASHI 
149*820c1a8dSHiroo HAYASHI # undef int8_t
150*820c1a8dSHiroo HAYASHI # undef uint8_t
151*820c1a8dSHiroo HAYASHI typedef signed char gl_int8_t;
152*820c1a8dSHiroo HAYASHI typedef unsigned char gl_uint8_t;
153*820c1a8dSHiroo HAYASHI # define int8_t gl_int8_t
154*820c1a8dSHiroo HAYASHI # define uint8_t gl_uint8_t
155*820c1a8dSHiroo HAYASHI 
156*820c1a8dSHiroo HAYASHI # undef int16_t
157*820c1a8dSHiroo HAYASHI # undef uint16_t
158*820c1a8dSHiroo HAYASHI typedef short int gl_int16_t;
159*820c1a8dSHiroo HAYASHI typedef unsigned short int gl_uint16_t;
160*820c1a8dSHiroo HAYASHI # define int16_t gl_int16_t
161*820c1a8dSHiroo HAYASHI # define uint16_t gl_uint16_t
162*820c1a8dSHiroo HAYASHI 
163*820c1a8dSHiroo HAYASHI # undef int32_t
164*820c1a8dSHiroo HAYASHI # undef uint32_t
165*820c1a8dSHiroo HAYASHI typedef int gl_int32_t;
166*820c1a8dSHiroo HAYASHI typedef unsigned int gl_uint32_t;
167*820c1a8dSHiroo HAYASHI # define int32_t gl_int32_t
168*820c1a8dSHiroo HAYASHI # define uint32_t gl_uint32_t
169*820c1a8dSHiroo HAYASHI 
170*820c1a8dSHiroo HAYASHI /* If the system defines INT64_MAX, assume int64_t works.  That way,
171*820c1a8dSHiroo HAYASHI    if the underlying platform defines int64_t to be a 64-bit long long
172*820c1a8dSHiroo HAYASHI    int, the code below won't mistakenly define it to be a 64-bit long
173*820c1a8dSHiroo HAYASHI    int, which would mess up C++ name mangling.  We must use #ifdef
174*820c1a8dSHiroo HAYASHI    rather than #if, to avoid an error with HP-UX 10.20 cc.  */
175*820c1a8dSHiroo HAYASHI 
176*820c1a8dSHiroo HAYASHI # ifdef INT64_MAX
177*820c1a8dSHiroo HAYASHI #  define GL_INT64_T
178*820c1a8dSHiroo HAYASHI # else
179*820c1a8dSHiroo HAYASHI /* Do not undefine int64_t if gnulib is not being used with 64-bit
180*820c1a8dSHiroo HAYASHI    types, since otherwise it breaks platforms like Tandem/NSK.  */
181*820c1a8dSHiroo HAYASHI #  if LONG_MAX >> 31 >> 31 == 1
182*820c1a8dSHiroo HAYASHI #   undef int64_t
183*820c1a8dSHiroo HAYASHI typedef long int gl_int64_t;
184*820c1a8dSHiroo HAYASHI #   define int64_t gl_int64_t
185*820c1a8dSHiroo HAYASHI #   define GL_INT64_T
186*820c1a8dSHiroo HAYASHI #  elif defined _MSC_VER
187*820c1a8dSHiroo HAYASHI #   undef int64_t
188*820c1a8dSHiroo HAYASHI typedef __int64 gl_int64_t;
189*820c1a8dSHiroo HAYASHI #   define int64_t gl_int64_t
190*820c1a8dSHiroo HAYASHI #   define GL_INT64_T
191*820c1a8dSHiroo HAYASHI #  else
192*820c1a8dSHiroo HAYASHI #   undef int64_t
193*820c1a8dSHiroo HAYASHI typedef long long int gl_int64_t;
194*820c1a8dSHiroo HAYASHI #   define int64_t gl_int64_t
195*820c1a8dSHiroo HAYASHI #   define GL_INT64_T
196*820c1a8dSHiroo HAYASHI #  endif
197*820c1a8dSHiroo HAYASHI # endif
198*820c1a8dSHiroo HAYASHI 
199*820c1a8dSHiroo HAYASHI # ifdef UINT64_MAX
200*820c1a8dSHiroo HAYASHI #  define GL_UINT64_T
201*820c1a8dSHiroo HAYASHI # else
202*820c1a8dSHiroo HAYASHI #  if ULONG_MAX >> 31 >> 31 >> 1 == 1
203*820c1a8dSHiroo HAYASHI #   undef uint64_t
204*820c1a8dSHiroo HAYASHI typedef unsigned long int gl_uint64_t;
205*820c1a8dSHiroo HAYASHI #   define uint64_t gl_uint64_t
206*820c1a8dSHiroo HAYASHI #   define GL_UINT64_T
207*820c1a8dSHiroo HAYASHI #  elif defined _MSC_VER
208*820c1a8dSHiroo HAYASHI #   undef uint64_t
209*820c1a8dSHiroo HAYASHI typedef unsigned __int64 gl_uint64_t;
210*820c1a8dSHiroo HAYASHI #   define uint64_t gl_uint64_t
211*820c1a8dSHiroo HAYASHI #   define GL_UINT64_T
212*820c1a8dSHiroo HAYASHI #  else
213*820c1a8dSHiroo HAYASHI #   undef uint64_t
214*820c1a8dSHiroo HAYASHI typedef unsigned long long int gl_uint64_t;
215*820c1a8dSHiroo HAYASHI #   define uint64_t gl_uint64_t
216*820c1a8dSHiroo HAYASHI #   define GL_UINT64_T
217*820c1a8dSHiroo HAYASHI #  endif
218*820c1a8dSHiroo HAYASHI # endif
219*820c1a8dSHiroo HAYASHI 
220*820c1a8dSHiroo HAYASHI /* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
221*820c1a8dSHiroo HAYASHI # define _UINT8_T
222*820c1a8dSHiroo HAYASHI # define _UINT32_T
223*820c1a8dSHiroo HAYASHI # define _UINT64_T
224*820c1a8dSHiroo HAYASHI 
225*820c1a8dSHiroo HAYASHI 
226*820c1a8dSHiroo HAYASHI /* 7.18.1.2. Minimum-width integer types */
227*820c1a8dSHiroo HAYASHI 
228*820c1a8dSHiroo HAYASHI /* Here we assume a standard architecture where the hardware integer
229*820c1a8dSHiroo HAYASHI    types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
230*820c1a8dSHiroo HAYASHI    are the same as the corresponding N_t types.  */
231*820c1a8dSHiroo HAYASHI 
232*820c1a8dSHiroo HAYASHI # undef int_least8_t
233*820c1a8dSHiroo HAYASHI # undef uint_least8_t
234*820c1a8dSHiroo HAYASHI # undef int_least16_t
235*820c1a8dSHiroo HAYASHI # undef uint_least16_t
236*820c1a8dSHiroo HAYASHI # undef int_least32_t
237*820c1a8dSHiroo HAYASHI # undef uint_least32_t
238*820c1a8dSHiroo HAYASHI # undef int_least64_t
239*820c1a8dSHiroo HAYASHI # undef uint_least64_t
240*820c1a8dSHiroo HAYASHI # define int_least8_t int8_t
241*820c1a8dSHiroo HAYASHI # define uint_least8_t uint8_t
242*820c1a8dSHiroo HAYASHI # define int_least16_t int16_t
243*820c1a8dSHiroo HAYASHI # define uint_least16_t uint16_t
244*820c1a8dSHiroo HAYASHI # define int_least32_t int32_t
245*820c1a8dSHiroo HAYASHI # define uint_least32_t uint32_t
246*820c1a8dSHiroo HAYASHI # ifdef GL_INT64_T
247*820c1a8dSHiroo HAYASHI #  define int_least64_t int64_t
248*820c1a8dSHiroo HAYASHI # endif
249*820c1a8dSHiroo HAYASHI # ifdef GL_UINT64_T
250*820c1a8dSHiroo HAYASHI #  define uint_least64_t uint64_t
251*820c1a8dSHiroo HAYASHI # endif
252*820c1a8dSHiroo HAYASHI 
253*820c1a8dSHiroo HAYASHI /* 7.18.1.3. Fastest minimum-width integer types */
254*820c1a8dSHiroo HAYASHI 
255*820c1a8dSHiroo HAYASHI /* Note: Other <stdint.h> substitutes may define these types differently.
256*820c1a8dSHiroo HAYASHI    It is not recommended to use these types in public header files. */
257*820c1a8dSHiroo HAYASHI 
258*820c1a8dSHiroo HAYASHI /* Here we assume a standard architecture where the hardware integer
259*820c1a8dSHiroo HAYASHI    types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
260*820c1a8dSHiroo HAYASHI    are taken from the same list of types.  The following code normally
261*820c1a8dSHiroo HAYASHI    uses types consistent with glibc, as that lessens the chance of
262*820c1a8dSHiroo HAYASHI    incompatibility with older GNU hosts.  */
263*820c1a8dSHiroo HAYASHI 
264*820c1a8dSHiroo HAYASHI # undef int_fast8_t
265*820c1a8dSHiroo HAYASHI # undef uint_fast8_t
266*820c1a8dSHiroo HAYASHI # undef int_fast16_t
267*820c1a8dSHiroo HAYASHI # undef uint_fast16_t
268*820c1a8dSHiroo HAYASHI # undef int_fast32_t
269*820c1a8dSHiroo HAYASHI # undef uint_fast32_t
270*820c1a8dSHiroo HAYASHI # undef int_fast64_t
271*820c1a8dSHiroo HAYASHI # undef uint_fast64_t
272*820c1a8dSHiroo HAYASHI typedef signed char gl_int_fast8_t;
273*820c1a8dSHiroo HAYASHI typedef unsigned char gl_uint_fast8_t;
274*820c1a8dSHiroo HAYASHI 
275*820c1a8dSHiroo HAYASHI # ifdef __sun
276*820c1a8dSHiroo HAYASHI /* Define types compatible with SunOS 5.10, so that code compiled under
277*820c1a8dSHiroo HAYASHI    earlier SunOS versions works with code compiled under SunOS 5.10.  */
278*820c1a8dSHiroo HAYASHI typedef int gl_int_fast32_t;
279*820c1a8dSHiroo HAYASHI typedef unsigned int gl_uint_fast32_t;
280*820c1a8dSHiroo HAYASHI # else
281*820c1a8dSHiroo HAYASHI typedef long int gl_int_fast32_t;
282*820c1a8dSHiroo HAYASHI typedef unsigned long int gl_uint_fast32_t;
283*820c1a8dSHiroo HAYASHI # endif
284*820c1a8dSHiroo HAYASHI typedef gl_int_fast32_t gl_int_fast16_t;
285*820c1a8dSHiroo HAYASHI typedef gl_uint_fast32_t gl_uint_fast16_t;
286*820c1a8dSHiroo HAYASHI 
287*820c1a8dSHiroo HAYASHI # define int_fast8_t gl_int_fast8_t
288*820c1a8dSHiroo HAYASHI # define uint_fast8_t gl_uint_fast8_t
289*820c1a8dSHiroo HAYASHI # define int_fast16_t gl_int_fast16_t
290*820c1a8dSHiroo HAYASHI # define uint_fast16_t gl_uint_fast16_t
291*820c1a8dSHiroo HAYASHI # define int_fast32_t gl_int_fast32_t
292*820c1a8dSHiroo HAYASHI # define uint_fast32_t gl_uint_fast32_t
293*820c1a8dSHiroo HAYASHI # ifdef GL_INT64_T
294*820c1a8dSHiroo HAYASHI #  define int_fast64_t int64_t
295*820c1a8dSHiroo HAYASHI # endif
296*820c1a8dSHiroo HAYASHI # ifdef GL_UINT64_T
297*820c1a8dSHiroo HAYASHI #  define uint_fast64_t uint64_t
298*820c1a8dSHiroo HAYASHI # endif
299*820c1a8dSHiroo HAYASHI 
300*820c1a8dSHiroo HAYASHI /* 7.18.1.4. Integer types capable of holding object pointers */
301*820c1a8dSHiroo HAYASHI 
302*820c1a8dSHiroo HAYASHI /* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own
303*820c1a8dSHiroo HAYASHI    definitions of intptr_t and uintptr_t (which use int and unsigned)
304*820c1a8dSHiroo HAYASHI    to avoid clashes with declarations of system functions like sbrk.
305*820c1a8dSHiroo HAYASHI    Similarly, MinGW WSL-5.4.1 <stdint.h> needs its own intptr_t and
306*820c1a8dSHiroo HAYASHI    uintptr_t to avoid conflicting declarations of system functions like
307*820c1a8dSHiroo HAYASHI    _findclose in <io.h>.  */
308*820c1a8dSHiroo HAYASHI # if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \
309*820c1a8dSHiroo HAYASHI        || defined __MINGW32__)
310*820c1a8dSHiroo HAYASHI #  undef intptr_t
311*820c1a8dSHiroo HAYASHI #  undef uintptr_t
312*820c1a8dSHiroo HAYASHI #  ifdef _WIN64
313*820c1a8dSHiroo HAYASHI typedef long long int gl_intptr_t;
314*820c1a8dSHiroo HAYASHI typedef unsigned long long int gl_uintptr_t;
315*820c1a8dSHiroo HAYASHI #  else
316*820c1a8dSHiroo HAYASHI typedef long int gl_intptr_t;
317*820c1a8dSHiroo HAYASHI typedef unsigned long int gl_uintptr_t;
318*820c1a8dSHiroo HAYASHI #  endif
319*820c1a8dSHiroo HAYASHI #  define intptr_t gl_intptr_t
320*820c1a8dSHiroo HAYASHI #  define uintptr_t gl_uintptr_t
321*820c1a8dSHiroo HAYASHI # endif
322*820c1a8dSHiroo HAYASHI 
323*820c1a8dSHiroo HAYASHI /* 7.18.1.5. Greatest-width integer types */
324*820c1a8dSHiroo HAYASHI 
325*820c1a8dSHiroo HAYASHI /* Note: These types are compiler dependent. It may be unwise to use them in
326*820c1a8dSHiroo HAYASHI    public header files. */
327*820c1a8dSHiroo HAYASHI 
328*820c1a8dSHiroo HAYASHI /* If the system defines INTMAX_MAX, assume that intmax_t works, and
329*820c1a8dSHiroo HAYASHI    similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
330*820c1a8dSHiroo HAYASHI    assuming one type where another is used by the system.  */
331*820c1a8dSHiroo HAYASHI 
332*820c1a8dSHiroo HAYASHI # ifndef INTMAX_MAX
333*820c1a8dSHiroo HAYASHI #  undef INTMAX_C
334*820c1a8dSHiroo HAYASHI #  undef intmax_t
335*820c1a8dSHiroo HAYASHI #  if LONG_MAX >> 30 == 1
336*820c1a8dSHiroo HAYASHI typedef long long int gl_intmax_t;
337*820c1a8dSHiroo HAYASHI #   define intmax_t gl_intmax_t
338*820c1a8dSHiroo HAYASHI #  elif defined GL_INT64_T
339*820c1a8dSHiroo HAYASHI #   define intmax_t int64_t
340*820c1a8dSHiroo HAYASHI #  else
341*820c1a8dSHiroo HAYASHI typedef long int gl_intmax_t;
342*820c1a8dSHiroo HAYASHI #   define intmax_t gl_intmax_t
343*820c1a8dSHiroo HAYASHI #  endif
344*820c1a8dSHiroo HAYASHI # endif
345*820c1a8dSHiroo HAYASHI 
346*820c1a8dSHiroo HAYASHI # ifndef UINTMAX_MAX
347*820c1a8dSHiroo HAYASHI #  undef UINTMAX_C
348*820c1a8dSHiroo HAYASHI #  undef uintmax_t
349*820c1a8dSHiroo HAYASHI #  if ULONG_MAX >> 31 == 1
350*820c1a8dSHiroo HAYASHI typedef unsigned long long int gl_uintmax_t;
351*820c1a8dSHiroo HAYASHI #   define uintmax_t gl_uintmax_t
352*820c1a8dSHiroo HAYASHI #  elif defined GL_UINT64_T
353*820c1a8dSHiroo HAYASHI #   define uintmax_t uint64_t
354*820c1a8dSHiroo HAYASHI #  else
355*820c1a8dSHiroo HAYASHI typedef unsigned long int gl_uintmax_t;
356*820c1a8dSHiroo HAYASHI #   define uintmax_t gl_uintmax_t
357*820c1a8dSHiroo HAYASHI #  endif
358*820c1a8dSHiroo HAYASHI # endif
359*820c1a8dSHiroo HAYASHI 
360*820c1a8dSHiroo HAYASHI /* Verify that intmax_t and uintmax_t have the same size.  Too much code
361*820c1a8dSHiroo HAYASHI    breaks if this is not the case.  If this check fails, the reason is likely
362*820c1a8dSHiroo HAYASHI    to be found in the autoconf macros.  */
363*820c1a8dSHiroo HAYASHI typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
364*820c1a8dSHiroo HAYASHI                                 ? 1 : -1];
365*820c1a8dSHiroo HAYASHI 
366*820c1a8dSHiroo HAYASHI # define GNULIB_defined_stdint_types 1
367*820c1a8dSHiroo HAYASHI # endif /* !GNULIB_defined_stdint_types */
368*820c1a8dSHiroo HAYASHI 
369*820c1a8dSHiroo HAYASHI /* 7.18.2. Limits of specified-width integer types */
370*820c1a8dSHiroo HAYASHI 
371*820c1a8dSHiroo HAYASHI /* 7.18.2.1. Limits of exact-width integer types */
372*820c1a8dSHiroo HAYASHI 
373*820c1a8dSHiroo HAYASHI /* Here we assume a standard architecture where the hardware integer
374*820c1a8dSHiroo HAYASHI    types have 8, 16, 32, optionally 64 bits.  */
375*820c1a8dSHiroo HAYASHI 
376*820c1a8dSHiroo HAYASHI # undef INT8_MIN
377*820c1a8dSHiroo HAYASHI # undef INT8_MAX
378*820c1a8dSHiroo HAYASHI # undef UINT8_MAX
379*820c1a8dSHiroo HAYASHI # define INT8_MIN  (~ INT8_MAX)
380*820c1a8dSHiroo HAYASHI # define INT8_MAX  127
381*820c1a8dSHiroo HAYASHI # define UINT8_MAX  255
382*820c1a8dSHiroo HAYASHI 
383*820c1a8dSHiroo HAYASHI # undef INT16_MIN
384*820c1a8dSHiroo HAYASHI # undef INT16_MAX
385*820c1a8dSHiroo HAYASHI # undef UINT16_MAX
386*820c1a8dSHiroo HAYASHI # define INT16_MIN  (~ INT16_MAX)
387*820c1a8dSHiroo HAYASHI # define INT16_MAX  32767
388*820c1a8dSHiroo HAYASHI # define UINT16_MAX  65535
389*820c1a8dSHiroo HAYASHI 
390*820c1a8dSHiroo HAYASHI # undef INT32_MIN
391*820c1a8dSHiroo HAYASHI # undef INT32_MAX
392*820c1a8dSHiroo HAYASHI # undef UINT32_MAX
393*820c1a8dSHiroo HAYASHI # define INT32_MIN  (~ INT32_MAX)
394*820c1a8dSHiroo HAYASHI # define INT32_MAX  2147483647
395*820c1a8dSHiroo HAYASHI # define UINT32_MAX  4294967295U
396*820c1a8dSHiroo HAYASHI 
397*820c1a8dSHiroo HAYASHI # if defined GL_INT64_T && ! defined INT64_MAX
398*820c1a8dSHiroo HAYASHI /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
399*820c1a8dSHiroo HAYASHI    evaluates the latter incorrectly in preprocessor expressions.  */
400*820c1a8dSHiroo HAYASHI #  define INT64_MIN  (- INTMAX_C (1) << 63)
401*820c1a8dSHiroo HAYASHI #  define INT64_MAX  INTMAX_C (9223372036854775807)
402*820c1a8dSHiroo HAYASHI # endif
403*820c1a8dSHiroo HAYASHI 
404*820c1a8dSHiroo HAYASHI # if defined GL_UINT64_T && ! defined UINT64_MAX
405*820c1a8dSHiroo HAYASHI #  define UINT64_MAX  UINTMAX_C (18446744073709551615)
406*820c1a8dSHiroo HAYASHI # endif
407*820c1a8dSHiroo HAYASHI 
408*820c1a8dSHiroo HAYASHI /* 7.18.2.2. Limits of minimum-width integer types */
409*820c1a8dSHiroo HAYASHI 
410*820c1a8dSHiroo HAYASHI /* Here we assume a standard architecture where the hardware integer
411*820c1a8dSHiroo HAYASHI    types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
412*820c1a8dSHiroo HAYASHI    are the same as the corresponding N_t types.  */
413*820c1a8dSHiroo HAYASHI 
414*820c1a8dSHiroo HAYASHI # undef INT_LEAST8_MIN
415*820c1a8dSHiroo HAYASHI # undef INT_LEAST8_MAX
416*820c1a8dSHiroo HAYASHI # undef UINT_LEAST8_MAX
417*820c1a8dSHiroo HAYASHI # define INT_LEAST8_MIN  INT8_MIN
418*820c1a8dSHiroo HAYASHI # define INT_LEAST8_MAX  INT8_MAX
419*820c1a8dSHiroo HAYASHI # define UINT_LEAST8_MAX  UINT8_MAX
420*820c1a8dSHiroo HAYASHI 
421*820c1a8dSHiroo HAYASHI # undef INT_LEAST16_MIN
422*820c1a8dSHiroo HAYASHI # undef INT_LEAST16_MAX
423*820c1a8dSHiroo HAYASHI # undef UINT_LEAST16_MAX
424*820c1a8dSHiroo HAYASHI # define INT_LEAST16_MIN  INT16_MIN
425*820c1a8dSHiroo HAYASHI # define INT_LEAST16_MAX  INT16_MAX
426*820c1a8dSHiroo HAYASHI # define UINT_LEAST16_MAX  UINT16_MAX
427*820c1a8dSHiroo HAYASHI 
428*820c1a8dSHiroo HAYASHI # undef INT_LEAST32_MIN
429*820c1a8dSHiroo HAYASHI # undef INT_LEAST32_MAX
430*820c1a8dSHiroo HAYASHI # undef UINT_LEAST32_MAX
431*820c1a8dSHiroo HAYASHI # define INT_LEAST32_MIN  INT32_MIN
432*820c1a8dSHiroo HAYASHI # define INT_LEAST32_MAX  INT32_MAX
433*820c1a8dSHiroo HAYASHI # define UINT_LEAST32_MAX  UINT32_MAX
434*820c1a8dSHiroo HAYASHI 
435*820c1a8dSHiroo HAYASHI # undef INT_LEAST64_MIN
436*820c1a8dSHiroo HAYASHI # undef INT_LEAST64_MAX
437*820c1a8dSHiroo HAYASHI # ifdef GL_INT64_T
438*820c1a8dSHiroo HAYASHI #  define INT_LEAST64_MIN  INT64_MIN
439*820c1a8dSHiroo HAYASHI #  define INT_LEAST64_MAX  INT64_MAX
440*820c1a8dSHiroo HAYASHI # endif
441*820c1a8dSHiroo HAYASHI 
442*820c1a8dSHiroo HAYASHI # undef UINT_LEAST64_MAX
443*820c1a8dSHiroo HAYASHI # ifdef GL_UINT64_T
444*820c1a8dSHiroo HAYASHI #  define UINT_LEAST64_MAX  UINT64_MAX
445*820c1a8dSHiroo HAYASHI # endif
446*820c1a8dSHiroo HAYASHI 
447*820c1a8dSHiroo HAYASHI /* 7.18.2.3. Limits of fastest minimum-width integer types */
448*820c1a8dSHiroo HAYASHI 
449*820c1a8dSHiroo HAYASHI /* Here we assume a standard architecture where the hardware integer
450*820c1a8dSHiroo HAYASHI    types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
451*820c1a8dSHiroo HAYASHI    are taken from the same list of types.  */
452*820c1a8dSHiroo HAYASHI 
453*820c1a8dSHiroo HAYASHI # undef INT_FAST8_MIN
454*820c1a8dSHiroo HAYASHI # undef INT_FAST8_MAX
455*820c1a8dSHiroo HAYASHI # undef UINT_FAST8_MAX
456*820c1a8dSHiroo HAYASHI # define INT_FAST8_MIN  SCHAR_MIN
457*820c1a8dSHiroo HAYASHI # define INT_FAST8_MAX  SCHAR_MAX
458*820c1a8dSHiroo HAYASHI # define UINT_FAST8_MAX  UCHAR_MAX
459*820c1a8dSHiroo HAYASHI 
460*820c1a8dSHiroo HAYASHI # undef INT_FAST16_MIN
461*820c1a8dSHiroo HAYASHI # undef INT_FAST16_MAX
462*820c1a8dSHiroo HAYASHI # undef UINT_FAST16_MAX
463*820c1a8dSHiroo HAYASHI # define INT_FAST16_MIN  INT_FAST32_MIN
464*820c1a8dSHiroo HAYASHI # define INT_FAST16_MAX  INT_FAST32_MAX
465*820c1a8dSHiroo HAYASHI # define UINT_FAST16_MAX  UINT_FAST32_MAX
466*820c1a8dSHiroo HAYASHI 
467*820c1a8dSHiroo HAYASHI # undef INT_FAST32_MIN
468*820c1a8dSHiroo HAYASHI # undef INT_FAST32_MAX
469*820c1a8dSHiroo HAYASHI # undef UINT_FAST32_MAX
470*820c1a8dSHiroo HAYASHI # ifdef __sun
471*820c1a8dSHiroo HAYASHI #  define INT_FAST32_MIN  INT_MIN
472*820c1a8dSHiroo HAYASHI #  define INT_FAST32_MAX  INT_MAX
473*820c1a8dSHiroo HAYASHI #  define UINT_FAST32_MAX  UINT_MAX
474*820c1a8dSHiroo HAYASHI # else
475*820c1a8dSHiroo HAYASHI #  define INT_FAST32_MIN  LONG_MIN
476*820c1a8dSHiroo HAYASHI #  define INT_FAST32_MAX  LONG_MAX
477*820c1a8dSHiroo HAYASHI #  define UINT_FAST32_MAX  ULONG_MAX
478*820c1a8dSHiroo HAYASHI # endif
479*820c1a8dSHiroo HAYASHI 
480*820c1a8dSHiroo HAYASHI # undef INT_FAST64_MIN
481*820c1a8dSHiroo HAYASHI # undef INT_FAST64_MAX
482*820c1a8dSHiroo HAYASHI # ifdef GL_INT64_T
483*820c1a8dSHiroo HAYASHI #  define INT_FAST64_MIN  INT64_MIN
484*820c1a8dSHiroo HAYASHI #  define INT_FAST64_MAX  INT64_MAX
485*820c1a8dSHiroo HAYASHI # endif
486*820c1a8dSHiroo HAYASHI 
487*820c1a8dSHiroo HAYASHI # undef UINT_FAST64_MAX
488*820c1a8dSHiroo HAYASHI # ifdef GL_UINT64_T
489*820c1a8dSHiroo HAYASHI #  define UINT_FAST64_MAX  UINT64_MAX
490*820c1a8dSHiroo HAYASHI # endif
491*820c1a8dSHiroo HAYASHI 
492*820c1a8dSHiroo HAYASHI /* 7.18.2.4. Limits of integer types capable of holding object pointers */
493*820c1a8dSHiroo HAYASHI 
494*820c1a8dSHiroo HAYASHI # undef INTPTR_MIN
495*820c1a8dSHiroo HAYASHI # undef INTPTR_MAX
496*820c1a8dSHiroo HAYASHI # undef UINTPTR_MAX
497*820c1a8dSHiroo HAYASHI # ifdef _WIN64
498*820c1a8dSHiroo HAYASHI #  define INTPTR_MIN  LLONG_MIN
499*820c1a8dSHiroo HAYASHI #  define INTPTR_MAX  LLONG_MAX
500*820c1a8dSHiroo HAYASHI #  define UINTPTR_MAX  ULLONG_MAX
501*820c1a8dSHiroo HAYASHI # else
502*820c1a8dSHiroo HAYASHI #  define INTPTR_MIN  LONG_MIN
503*820c1a8dSHiroo HAYASHI #  define INTPTR_MAX  LONG_MAX
504*820c1a8dSHiroo HAYASHI #  define UINTPTR_MAX  ULONG_MAX
505*820c1a8dSHiroo HAYASHI # endif
506*820c1a8dSHiroo HAYASHI 
507*820c1a8dSHiroo HAYASHI /* 7.18.2.5. Limits of greatest-width integer types */
508*820c1a8dSHiroo HAYASHI 
509*820c1a8dSHiroo HAYASHI # ifndef INTMAX_MAX
510*820c1a8dSHiroo HAYASHI #  undef INTMAX_MIN
511*820c1a8dSHiroo HAYASHI #  ifdef INT64_MAX
512*820c1a8dSHiroo HAYASHI #   define INTMAX_MIN  INT64_MIN
513*820c1a8dSHiroo HAYASHI #   define INTMAX_MAX  INT64_MAX
514*820c1a8dSHiroo HAYASHI #  else
515*820c1a8dSHiroo HAYASHI #   define INTMAX_MIN  INT32_MIN
516*820c1a8dSHiroo HAYASHI #   define INTMAX_MAX  INT32_MAX
517*820c1a8dSHiroo HAYASHI #  endif
518*820c1a8dSHiroo HAYASHI # endif
519*820c1a8dSHiroo HAYASHI 
520*820c1a8dSHiroo HAYASHI # ifndef UINTMAX_MAX
521*820c1a8dSHiroo HAYASHI #  ifdef UINT64_MAX
522*820c1a8dSHiroo HAYASHI #   define UINTMAX_MAX  UINT64_MAX
523*820c1a8dSHiroo HAYASHI #  else
524*820c1a8dSHiroo HAYASHI #   define UINTMAX_MAX  UINT32_MAX
525*820c1a8dSHiroo HAYASHI #  endif
526*820c1a8dSHiroo HAYASHI # endif
527*820c1a8dSHiroo HAYASHI 
528*820c1a8dSHiroo HAYASHI /* 7.18.3. Limits of other integer types */
529*820c1a8dSHiroo HAYASHI 
530*820c1a8dSHiroo HAYASHI /* ptrdiff_t limits */
531*820c1a8dSHiroo HAYASHI # undef PTRDIFF_MIN
532*820c1a8dSHiroo HAYASHI # undef PTRDIFF_MAX
533*820c1a8dSHiroo HAYASHI # if @APPLE_UNIVERSAL_BUILD@
534*820c1a8dSHiroo HAYASHI #  ifdef _LP64
535*820c1a8dSHiroo HAYASHI #   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (64, 0l)
536*820c1a8dSHiroo HAYASHI #   define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
537*820c1a8dSHiroo HAYASHI #  else
538*820c1a8dSHiroo HAYASHI #   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (32, 0)
539*820c1a8dSHiroo HAYASHI #   define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
540*820c1a8dSHiroo HAYASHI #  endif
541*820c1a8dSHiroo HAYASHI # else
542*820c1a8dSHiroo HAYASHI #  define PTRDIFF_MIN  \
543*820c1a8dSHiroo HAYASHI     _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
544*820c1a8dSHiroo HAYASHI #  define PTRDIFF_MAX  \
545*820c1a8dSHiroo HAYASHI     _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
546*820c1a8dSHiroo HAYASHI # endif
547*820c1a8dSHiroo HAYASHI 
548*820c1a8dSHiroo HAYASHI /* sig_atomic_t limits */
549*820c1a8dSHiroo HAYASHI # undef SIG_ATOMIC_MIN
550*820c1a8dSHiroo HAYASHI # undef SIG_ATOMIC_MAX
551*820c1a8dSHiroo HAYASHI # if @HAVE_SIGNED_SIG_ATOMIC_T@
552*820c1a8dSHiroo HAYASHI #  define SIG_ATOMIC_MIN  \
553*820c1a8dSHiroo HAYASHI     _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
554*820c1a8dSHiroo HAYASHI # else
555*820c1a8dSHiroo HAYASHI #  define SIG_ATOMIC_MIN  \
556*820c1a8dSHiroo HAYASHI     _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
557*820c1a8dSHiroo HAYASHI # endif
558*820c1a8dSHiroo HAYASHI # define SIG_ATOMIC_MAX  \
559*820c1a8dSHiroo HAYASHI    _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
560*820c1a8dSHiroo HAYASHI                 0@SIG_ATOMIC_T_SUFFIX@)
561*820c1a8dSHiroo HAYASHI 
562*820c1a8dSHiroo HAYASHI 
563*820c1a8dSHiroo HAYASHI /* size_t limit */
564*820c1a8dSHiroo HAYASHI # undef SIZE_MAX
565*820c1a8dSHiroo HAYASHI # if @APPLE_UNIVERSAL_BUILD@
566*820c1a8dSHiroo HAYASHI #  ifdef _LP64
567*820c1a8dSHiroo HAYASHI #   define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
568*820c1a8dSHiroo HAYASHI #  else
569*820c1a8dSHiroo HAYASHI #   define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
570*820c1a8dSHiroo HAYASHI #  endif
571*820c1a8dSHiroo HAYASHI # else
572*820c1a8dSHiroo HAYASHI #  define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
573*820c1a8dSHiroo HAYASHI # endif
574*820c1a8dSHiroo HAYASHI 
575*820c1a8dSHiroo HAYASHI /* wchar_t limits */
576*820c1a8dSHiroo HAYASHI /* Get WCHAR_MIN, WCHAR_MAX.
577*820c1a8dSHiroo HAYASHI    This include is not on the top, above, because on OSF/1 4.0 we have a
578*820c1a8dSHiroo HAYASHI    sequence of nested includes
579*820c1a8dSHiroo HAYASHI    <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
580*820c1a8dSHiroo HAYASHI    <stdint.h> and assumes its types are already defined.  */
581*820c1a8dSHiroo HAYASHI # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
582*820c1a8dSHiroo HAYASHI #  define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
583*820c1a8dSHiroo HAYASHI #  include <wchar.h>
584*820c1a8dSHiroo HAYASHI #  undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
585*820c1a8dSHiroo HAYASHI # endif
586*820c1a8dSHiroo HAYASHI # undef WCHAR_MIN
587*820c1a8dSHiroo HAYASHI # undef WCHAR_MAX
588*820c1a8dSHiroo HAYASHI # if @HAVE_SIGNED_WCHAR_T@
589*820c1a8dSHiroo HAYASHI #  define WCHAR_MIN  \
590*820c1a8dSHiroo HAYASHI     _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
591*820c1a8dSHiroo HAYASHI # else
592*820c1a8dSHiroo HAYASHI #  define WCHAR_MIN  \
593*820c1a8dSHiroo HAYASHI     _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
594*820c1a8dSHiroo HAYASHI # endif
595*820c1a8dSHiroo HAYASHI # define WCHAR_MAX  \
596*820c1a8dSHiroo HAYASHI    _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
597*820c1a8dSHiroo HAYASHI 
598*820c1a8dSHiroo HAYASHI /* wint_t limits */
599*820c1a8dSHiroo HAYASHI /* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not
600*820c1a8dSHiroo HAYASHI    accurate, therefore use the definitions from above.  */
601*820c1a8dSHiroo HAYASHI # if !@GNULIBHEADERS_OVERRIDE_WINT_T@
602*820c1a8dSHiroo HAYASHI #  undef WINT_MIN
603*820c1a8dSHiroo HAYASHI #  undef WINT_MAX
604*820c1a8dSHiroo HAYASHI #  if @HAVE_SIGNED_WINT_T@
605*820c1a8dSHiroo HAYASHI #   define WINT_MIN  \
606*820c1a8dSHiroo HAYASHI      _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
607*820c1a8dSHiroo HAYASHI #  else
608*820c1a8dSHiroo HAYASHI #   define WINT_MIN  \
609*820c1a8dSHiroo HAYASHI      _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
610*820c1a8dSHiroo HAYASHI #  endif
611*820c1a8dSHiroo HAYASHI #  define WINT_MAX  \
612*820c1a8dSHiroo HAYASHI     _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
613*820c1a8dSHiroo HAYASHI # endif
614*820c1a8dSHiroo HAYASHI 
615*820c1a8dSHiroo HAYASHI /* 7.18.4. Macros for integer constants */
616*820c1a8dSHiroo HAYASHI 
617*820c1a8dSHiroo HAYASHI /* 7.18.4.1. Macros for minimum-width integer constants */
618*820c1a8dSHiroo HAYASHI /* According to ISO C 99 Technical Corrigendum 1 */
619*820c1a8dSHiroo HAYASHI 
620*820c1a8dSHiroo HAYASHI /* Here we assume a standard architecture where the hardware integer
621*820c1a8dSHiroo HAYASHI    types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
622*820c1a8dSHiroo HAYASHI 
623*820c1a8dSHiroo HAYASHI # undef INT8_C
624*820c1a8dSHiroo HAYASHI # undef UINT8_C
625*820c1a8dSHiroo HAYASHI # define INT8_C(x) x
626*820c1a8dSHiroo HAYASHI # define UINT8_C(x) x
627*820c1a8dSHiroo HAYASHI 
628*820c1a8dSHiroo HAYASHI # undef INT16_C
629*820c1a8dSHiroo HAYASHI # undef UINT16_C
630*820c1a8dSHiroo HAYASHI # define INT16_C(x) x
631*820c1a8dSHiroo HAYASHI # define UINT16_C(x) x
632*820c1a8dSHiroo HAYASHI 
633*820c1a8dSHiroo HAYASHI # undef INT32_C
634*820c1a8dSHiroo HAYASHI # undef UINT32_C
635*820c1a8dSHiroo HAYASHI # define INT32_C(x) x
636*820c1a8dSHiroo HAYASHI # define UINT32_C(x) x ## U
637*820c1a8dSHiroo HAYASHI 
638*820c1a8dSHiroo HAYASHI # undef INT64_C
639*820c1a8dSHiroo HAYASHI # undef UINT64_C
640*820c1a8dSHiroo HAYASHI # if LONG_MAX >> 31 >> 31 == 1
641*820c1a8dSHiroo HAYASHI #  define INT64_C(x) x##L
642*820c1a8dSHiroo HAYASHI # elif defined _MSC_VER
643*820c1a8dSHiroo HAYASHI #  define INT64_C(x) x##i64
644*820c1a8dSHiroo HAYASHI # else
645*820c1a8dSHiroo HAYASHI #  define INT64_C(x) x##LL
646*820c1a8dSHiroo HAYASHI # endif
647*820c1a8dSHiroo HAYASHI # if ULONG_MAX >> 31 >> 31 >> 1 == 1
648*820c1a8dSHiroo HAYASHI #  define UINT64_C(x) x##UL
649*820c1a8dSHiroo HAYASHI # elif defined _MSC_VER
650*820c1a8dSHiroo HAYASHI #  define UINT64_C(x) x##ui64
651*820c1a8dSHiroo HAYASHI # else
652*820c1a8dSHiroo HAYASHI #  define UINT64_C(x) x##ULL
653*820c1a8dSHiroo HAYASHI # endif
654*820c1a8dSHiroo HAYASHI 
655*820c1a8dSHiroo HAYASHI /* 7.18.4.2. Macros for greatest-width integer constants */
656*820c1a8dSHiroo HAYASHI 
657*820c1a8dSHiroo HAYASHI # ifndef INTMAX_C
658*820c1a8dSHiroo HAYASHI #  if LONG_MAX >> 30 == 1
659*820c1a8dSHiroo HAYASHI #   define INTMAX_C(x)   x##LL
660*820c1a8dSHiroo HAYASHI #  elif defined GL_INT64_T
661*820c1a8dSHiroo HAYASHI #   define INTMAX_C(x)   INT64_C(x)
662*820c1a8dSHiroo HAYASHI #  else
663*820c1a8dSHiroo HAYASHI #   define INTMAX_C(x)   x##L
664*820c1a8dSHiroo HAYASHI #  endif
665*820c1a8dSHiroo HAYASHI # endif
666*820c1a8dSHiroo HAYASHI 
667*820c1a8dSHiroo HAYASHI # ifndef UINTMAX_C
668*820c1a8dSHiroo HAYASHI #  if ULONG_MAX >> 31 == 1
669*820c1a8dSHiroo HAYASHI #   define UINTMAX_C(x)  x##ULL
670*820c1a8dSHiroo HAYASHI #  elif defined GL_UINT64_T
671*820c1a8dSHiroo HAYASHI #   define UINTMAX_C(x)  UINT64_C(x)
672*820c1a8dSHiroo HAYASHI #  else
673*820c1a8dSHiroo HAYASHI #   define UINTMAX_C(x)  x##UL
674*820c1a8dSHiroo HAYASHI #  endif
675*820c1a8dSHiroo HAYASHI # endif
676*820c1a8dSHiroo HAYASHI 
677*820c1a8dSHiroo HAYASHI #endif /* !@HAVE_C99_STDINT_H@ */
678*820c1a8dSHiroo HAYASHI 
679*820c1a8dSHiroo HAYASHI /* Macros specified by ISO/IEC TS 18661-1:2014.  */
680*820c1a8dSHiroo HAYASHI 
681*820c1a8dSHiroo HAYASHI #if (!defined UINTMAX_WIDTH \
682*820c1a8dSHiroo HAYASHI      && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
683*820c1a8dSHiroo HAYASHI # ifdef INT8_MAX
684*820c1a8dSHiroo HAYASHI #  define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX)
685*820c1a8dSHiroo HAYASHI # endif
686*820c1a8dSHiroo HAYASHI # ifdef UINT8_MAX
687*820c1a8dSHiroo HAYASHI #  define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX)
688*820c1a8dSHiroo HAYASHI # endif
689*820c1a8dSHiroo HAYASHI # ifdef INT16_MAX
690*820c1a8dSHiroo HAYASHI #  define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX)
691*820c1a8dSHiroo HAYASHI # endif
692*820c1a8dSHiroo HAYASHI # ifdef UINT16_MAX
693*820c1a8dSHiroo HAYASHI #  define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX)
694*820c1a8dSHiroo HAYASHI # endif
695*820c1a8dSHiroo HAYASHI # ifdef INT32_MAX
696*820c1a8dSHiroo HAYASHI #  define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX)
697*820c1a8dSHiroo HAYASHI # endif
698*820c1a8dSHiroo HAYASHI # ifdef UINT32_MAX
699*820c1a8dSHiroo HAYASHI #  define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX)
700*820c1a8dSHiroo HAYASHI # endif
701*820c1a8dSHiroo HAYASHI # ifdef INT64_MAX
702*820c1a8dSHiroo HAYASHI #  define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX)
703*820c1a8dSHiroo HAYASHI # endif
704*820c1a8dSHiroo HAYASHI # ifdef UINT64_MAX
705*820c1a8dSHiroo HAYASHI #  define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX)
706*820c1a8dSHiroo HAYASHI # endif
707*820c1a8dSHiroo HAYASHI # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX)
708*820c1a8dSHiroo HAYASHI # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX)
709*820c1a8dSHiroo HAYASHI # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX)
710*820c1a8dSHiroo HAYASHI # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX)
711*820c1a8dSHiroo HAYASHI # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX)
712*820c1a8dSHiroo HAYASHI # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX)
713*820c1a8dSHiroo HAYASHI # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX)
714*820c1a8dSHiroo HAYASHI # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX)
715*820c1a8dSHiroo HAYASHI # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX)
716*820c1a8dSHiroo HAYASHI # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX)
717*820c1a8dSHiroo HAYASHI # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX)
718*820c1a8dSHiroo HAYASHI # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX)
719*820c1a8dSHiroo HAYASHI # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX)
720*820c1a8dSHiroo HAYASHI # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX)
721*820c1a8dSHiroo HAYASHI # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX)
722*820c1a8dSHiroo HAYASHI # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX)
723*820c1a8dSHiroo HAYASHI # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX)
724*820c1a8dSHiroo HAYASHI # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX)
725*820c1a8dSHiroo HAYASHI # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX)
726*820c1a8dSHiroo HAYASHI # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX)
727*820c1a8dSHiroo HAYASHI # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX)
728*820c1a8dSHiroo HAYASHI # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX)
729*820c1a8dSHiroo HAYASHI # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX)
730*820c1a8dSHiroo HAYASHI # ifdef WINT_MAX
731*820c1a8dSHiroo HAYASHI #  define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX)
732*820c1a8dSHiroo HAYASHI # endif
733*820c1a8dSHiroo HAYASHI # ifdef SIG_ATOMIC_MAX
734*820c1a8dSHiroo HAYASHI #  define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX)
735*820c1a8dSHiroo HAYASHI # endif
736*820c1a8dSHiroo HAYASHI #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
737*820c1a8dSHiroo HAYASHI 
738*820c1a8dSHiroo HAYASHI #endif /* _@GUARD_PREFIX@_STDINT_H */
739*820c1a8dSHiroo HAYASHI #endif /* !(defined __ANDROID__ && ...) */
740*820c1a8dSHiroo HAYASHI #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
741