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