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