1/* Copyright (C) 2001-2002, 2004-2009 Free Software Foundation, Inc. 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 16 along with this program; if not, write to the Free Software Foundation, 17 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 18 19/* 20 * ISO C 99 <stdint.h> for platforms that lack it. 21 * <http://www.opengroup.org/susv3xbd/stdint.h.html> 22 */ 23 24#ifndef _GL_STDINT_H 25 26/* When including a system file that in turn includes <inttypes.h>, 27 use the system <inttypes.h>, not our substitute. This avoids 28 problems with (for example) VMS, whose <sys/bitypes.h> includes 29 <inttypes.h>. */ 30#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H 31 32/* Get those types that are already defined in other system include 33 files, so that we can "#define int8_t signed char" below without 34 worrying about a later system include file containing a "typedef 35 signed char int8_t;" that will get messed up by our macro. Our 36 macros should all be consistent with the system versions, except 37 for the "fast" types and macros, which we recommend against using 38 in public interfaces due to compiler differences. */ 39 40#if @HAVE_STDINT_H@ 41# if defined __sgi && ! defined __c99 42 /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users 43 with "This header file is to be used only for c99 mode compilations" 44 diagnostics. */ 45# define __STDINT_H__ 46# endif 47 /* Other systems may have an incomplete or buggy <stdint.h>. 48 Include it before <inttypes.h>, since any "#include <stdint.h>" 49 in <inttypes.h> would reinclude us, skipping our contents because 50 _GL_STDINT_H is defined. 51 The include_next requires a split double-inclusion guard. */ 52# if __GNUC__ >= 3 53@PRAGMA_SYSTEM_HEADER@ 54# endif 55# @INCLUDE_NEXT@ @NEXT_STDINT_H@ 56#endif 57 58#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H 59#define _GL_STDINT_H 60 61/* <sys/types.h> defines some of the stdint.h types as well, on glibc, 62 IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). 63 AIX 5.2 <sys/types.h> isn't needed and causes troubles. 64 MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but 65 relies on the system <stdint.h> definitions, so include 66 <sys/types.h> after @NEXT_STDINT_H@. */ 67#if @HAVE_SYS_TYPES_H@ && ! defined _AIX 68# include <sys/types.h> 69#endif 70 71/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */ 72#include <limits.h> 73 74#if @HAVE_INTTYPES_H@ 75 /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines 76 int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. 77 <inttypes.h> also defines intptr_t and uintptr_t. */ 78# include <inttypes.h> 79#elif @HAVE_SYS_INTTYPES_H@ 80 /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and 81 the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ 82# include <sys/inttypes.h> 83#endif 84 85#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ 86 /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines 87 int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is 88 included by <sys/types.h>. */ 89# include <sys/bitypes.h> 90#endif 91 92#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H 93 94/* Minimum and maximum values for a integer type under the usual assumption. 95 Return an unspecified value if BITS == 0, adding a check to pacify 96 picky compilers. */ 97 98#define _STDINT_MIN(signed, bits, zero) \ 99 ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) 100 101#define _STDINT_MAX(signed, bits, zero) \ 102 ((signed) \ 103 ? ~ _STDINT_MIN (signed, bits, zero) \ 104 : /* The expression for the unsigned case. The subtraction of (signed) \ 105 is a nop in the unsigned case and avoids "signed integer overflow" \ 106 warnings in the signed case. */ \ 107 ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) 108 109/* 7.18.1.1. Exact-width integer types */ 110 111/* Here we assume a standard architecture where the hardware integer 112 types have 8, 16, 32, optionally 64 bits. */ 113 114#undef int8_t 115#undef uint8_t 116typedef signed char gl_int8_t; 117typedef unsigned char gl_uint8_t; 118#define int8_t gl_int8_t 119#define uint8_t gl_uint8_t 120 121#undef int16_t 122#undef uint16_t 123typedef short int gl_int16_t; 124typedef unsigned short int gl_uint16_t; 125#define int16_t gl_int16_t 126#define uint16_t gl_uint16_t 127 128#undef int32_t 129#undef uint32_t 130typedef int gl_int32_t; 131typedef unsigned int gl_uint32_t; 132#define int32_t gl_int32_t 133#define uint32_t gl_uint32_t 134 135/* Do not undefine int64_t if gnulib is not being used with 64-bit 136 types, since otherwise it breaks platforms like Tandem/NSK. */ 137#if LONG_MAX >> 31 >> 31 == 1 138# undef int64_t 139typedef long int gl_int64_t; 140# define int64_t gl_int64_t 141# define GL_INT64_T 142#elif defined _MSC_VER 143# undef int64_t 144typedef __int64 gl_int64_t; 145# define int64_t gl_int64_t 146# define GL_INT64_T 147#elif @HAVE_LONG_LONG_INT@ 148# undef int64_t 149typedef long long int gl_int64_t; 150# define int64_t gl_int64_t 151# define GL_INT64_T 152#endif 153 154#if ULONG_MAX >> 31 >> 31 >> 1 == 1 155# undef uint64_t 156typedef unsigned long int gl_uint64_t; 157# define uint64_t gl_uint64_t 158# define GL_UINT64_T 159#elif defined _MSC_VER 160# undef uint64_t 161typedef unsigned __int64 gl_uint64_t; 162# define uint64_t gl_uint64_t 163# define GL_UINT64_T 164#elif @HAVE_UNSIGNED_LONG_LONG_INT@ 165# undef uint64_t 166typedef unsigned long long int gl_uint64_t; 167# define uint64_t gl_uint64_t 168# define GL_UINT64_T 169#endif 170 171/* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ 172#define _UINT8_T 173#define _UINT32_T 174#define _UINT64_T 175 176 177/* 7.18.1.2. Minimum-width integer types */ 178 179/* Here we assume a standard architecture where the hardware integer 180 types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types 181 are the same as the corresponding N_t types. */ 182 183#undef int_least8_t 184#undef uint_least8_t 185#undef int_least16_t 186#undef uint_least16_t 187#undef int_least32_t 188#undef uint_least32_t 189#undef int_least64_t 190#undef uint_least64_t 191#define int_least8_t int8_t 192#define uint_least8_t uint8_t 193#define int_least16_t int16_t 194#define uint_least16_t uint16_t 195#define int_least32_t int32_t 196#define uint_least32_t uint32_t 197#ifdef GL_INT64_T 198# define int_least64_t int64_t 199#endif 200#ifdef GL_UINT64_T 201# define uint_least64_t uint64_t 202#endif 203 204/* 7.18.1.3. Fastest minimum-width integer types */ 205 206/* Note: Other <stdint.h> substitutes may define these types differently. 207 It is not recommended to use these types in public header files. */ 208 209/* Here we assume a standard architecture where the hardware integer 210 types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types 211 are taken from the same list of types. Assume that 'long int' 212 is fast enough for all narrower integers. */ 213 214#undef int_fast8_t 215#undef uint_fast8_t 216#undef int_fast16_t 217#undef uint_fast16_t 218#undef int_fast32_t 219#undef uint_fast32_t 220#undef int_fast64_t 221#undef uint_fast64_t 222typedef long int gl_int_fast8_t; 223typedef unsigned long int gl_uint_fast8_t; 224typedef long int gl_int_fast16_t; 225typedef unsigned long int gl_uint_fast16_t; 226typedef long int gl_int_fast32_t; 227typedef unsigned long int gl_uint_fast32_t; 228#define int_fast8_t gl_int_fast8_t 229#define uint_fast8_t gl_uint_fast8_t 230#define int_fast16_t gl_int_fast16_t 231#define uint_fast16_t gl_uint_fast16_t 232#define int_fast32_t gl_int_fast32_t 233#define uint_fast32_t gl_uint_fast32_t 234#ifdef GL_INT64_T 235# define int_fast64_t int64_t 236#endif 237#ifdef GL_UINT64_T 238# define uint_fast64_t uint64_t 239#endif 240 241/* 7.18.1.4. Integer types capable of holding object pointers */ 242 243#undef intptr_t 244#undef uintptr_t 245typedef long int gl_intptr_t; 246typedef unsigned long int gl_uintptr_t; 247#define intptr_t gl_intptr_t 248#define uintptr_t gl_uintptr_t 249 250/* 7.18.1.5. Greatest-width integer types */ 251 252/* Note: These types are compiler dependent. It may be unwise to use them in 253 public header files. */ 254 255#undef intmax_t 256#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 257typedef long long int gl_intmax_t; 258# define intmax_t gl_intmax_t 259#elif defined GL_INT64_T 260# define intmax_t int64_t 261#else 262typedef long int gl_intmax_t; 263# define intmax_t gl_intmax_t 264#endif 265 266#undef uintmax_t 267#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 268typedef unsigned long long int gl_uintmax_t; 269# define uintmax_t gl_uintmax_t 270#elif defined GL_UINT64_T 271# define uintmax_t uint64_t 272#else 273typedef unsigned long int gl_uintmax_t; 274# define uintmax_t gl_uintmax_t 275#endif 276 277/* Verify that intmax_t and uintmax_t have the same size. Too much code 278 breaks if this is not the case. If this check fails, the reason is likely 279 to be found in the autoconf macros. */ 280typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1]; 281 282/* 7.18.2. Limits of specified-width integer types */ 283 284#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS 285 286/* 7.18.2.1. Limits of exact-width integer types */ 287 288/* Here we assume a standard architecture where the hardware integer 289 types have 8, 16, 32, optionally 64 bits. */ 290 291#undef INT8_MIN 292#undef INT8_MAX 293#undef UINT8_MAX 294#define INT8_MIN (~ INT8_MAX) 295#define INT8_MAX 127 296#define UINT8_MAX 255 297 298#undef INT16_MIN 299#undef INT16_MAX 300#undef UINT16_MAX 301#define INT16_MIN (~ INT16_MAX) 302#define INT16_MAX 32767 303#define UINT16_MAX 65535 304 305#undef INT32_MIN 306#undef INT32_MAX 307#undef UINT32_MAX 308#define INT32_MIN (~ INT32_MAX) 309#define INT32_MAX 2147483647 310#define UINT32_MAX 4294967295U 311 312#undef INT64_MIN 313#undef INT64_MAX 314#ifdef GL_INT64_T 315/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 316 evaluates the latter incorrectly in preprocessor expressions. */ 317# define INT64_MIN (- INTMAX_C (1) << 63) 318# define INT64_MAX INTMAX_C (9223372036854775807) 319#endif 320 321#undef UINT64_MAX 322#ifdef GL_UINT64_T 323# define UINT64_MAX UINTMAX_C (18446744073709551615) 324#endif 325 326/* 7.18.2.2. Limits of minimum-width integer types */ 327 328/* Here we assume a standard architecture where the hardware integer 329 types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types 330 are the same as the corresponding N_t types. */ 331 332#undef INT_LEAST8_MIN 333#undef INT_LEAST8_MAX 334#undef UINT_LEAST8_MAX 335#define INT_LEAST8_MIN INT8_MIN 336#define INT_LEAST8_MAX INT8_MAX 337#define UINT_LEAST8_MAX UINT8_MAX 338 339#undef INT_LEAST16_MIN 340#undef INT_LEAST16_MAX 341#undef UINT_LEAST16_MAX 342#define INT_LEAST16_MIN INT16_MIN 343#define INT_LEAST16_MAX INT16_MAX 344#define UINT_LEAST16_MAX UINT16_MAX 345 346#undef INT_LEAST32_MIN 347#undef INT_LEAST32_MAX 348#undef UINT_LEAST32_MAX 349#define INT_LEAST32_MIN INT32_MIN 350#define INT_LEAST32_MAX INT32_MAX 351#define UINT_LEAST32_MAX UINT32_MAX 352 353#undef INT_LEAST64_MIN 354#undef INT_LEAST64_MAX 355#ifdef GL_INT64_T 356# define INT_LEAST64_MIN INT64_MIN 357# define INT_LEAST64_MAX INT64_MAX 358#endif 359 360#undef UINT_LEAST64_MAX 361#ifdef GL_UINT64_T 362# define UINT_LEAST64_MAX UINT64_MAX 363#endif 364 365/* 7.18.2.3. Limits of fastest minimum-width integer types */ 366 367/* Here we assume a standard architecture where the hardware integer 368 types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types 369 are taken from the same list of types. */ 370 371#undef INT_FAST8_MIN 372#undef INT_FAST8_MAX 373#undef UINT_FAST8_MAX 374#define INT_FAST8_MIN LONG_MIN 375#define INT_FAST8_MAX LONG_MAX 376#define UINT_FAST8_MAX ULONG_MAX 377 378#undef INT_FAST16_MIN 379#undef INT_FAST16_MAX 380#undef UINT_FAST16_MAX 381#define INT_FAST16_MIN LONG_MIN 382#define INT_FAST16_MAX LONG_MAX 383#define UINT_FAST16_MAX ULONG_MAX 384 385#undef INT_FAST32_MIN 386#undef INT_FAST32_MAX 387#undef UINT_FAST32_MAX 388#define INT_FAST32_MIN LONG_MIN 389#define INT_FAST32_MAX LONG_MAX 390#define UINT_FAST32_MAX ULONG_MAX 391 392#undef INT_FAST64_MIN 393#undef INT_FAST64_MAX 394#ifdef GL_INT64_T 395# define INT_FAST64_MIN INT64_MIN 396# define INT_FAST64_MAX INT64_MAX 397#endif 398 399#undef UINT_FAST64_MAX 400#ifdef GL_UINT64_T 401# define UINT_FAST64_MAX UINT64_MAX 402#endif 403 404/* 7.18.2.4. Limits of integer types capable of holding object pointers */ 405 406#undef INTPTR_MIN 407#undef INTPTR_MAX 408#undef UINTPTR_MAX 409#define INTPTR_MIN LONG_MIN 410#define INTPTR_MAX LONG_MAX 411#define UINTPTR_MAX ULONG_MAX 412 413/* 7.18.2.5. Limits of greatest-width integer types */ 414 415#undef INTMAX_MIN 416#undef INTMAX_MAX 417#ifdef INT64_MAX 418# define INTMAX_MIN INT64_MIN 419# define INTMAX_MAX INT64_MAX 420#else 421# define INTMAX_MIN INT32_MIN 422# define INTMAX_MAX INT32_MAX 423#endif 424 425#undef UINTMAX_MAX 426#ifdef UINT64_MAX 427# define UINTMAX_MAX UINT64_MAX 428#else 429# define UINTMAX_MAX UINT32_MAX 430#endif 431 432/* 7.18.3. Limits of other integer types */ 433 434/* ptrdiff_t limits */ 435#undef PTRDIFF_MIN 436#undef PTRDIFF_MAX 437#if @APPLE_UNIVERSAL_BUILD@ 438# ifdef _LP64 439# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) 440# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) 441# else 442# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) 443# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) 444# endif 445#else 446# define PTRDIFF_MIN \ 447 _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) 448# define PTRDIFF_MAX \ 449 _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) 450#endif 451 452/* sig_atomic_t limits */ 453#undef SIG_ATOMIC_MIN 454#undef SIG_ATOMIC_MAX 455#define SIG_ATOMIC_MIN \ 456 _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 457 0@SIG_ATOMIC_T_SUFFIX@) 458#define SIG_ATOMIC_MAX \ 459 _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 460 0@SIG_ATOMIC_T_SUFFIX@) 461 462 463/* size_t limit */ 464#undef SIZE_MAX 465#if @APPLE_UNIVERSAL_BUILD@ 466# ifdef _LP64 467# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) 468# else 469# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) 470# endif 471#else 472# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) 473#endif 474 475/* wchar_t limits */ 476/* Get WCHAR_MIN, WCHAR_MAX. 477 This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested 478 includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes 479 <stdint.h> and assumes its types are already defined. */ 480#if ! (defined WCHAR_MIN && defined WCHAR_MAX) 481# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H 482# include <wchar.h> 483# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H 484#endif 485#undef WCHAR_MIN 486#undef WCHAR_MAX 487#define WCHAR_MIN \ 488 _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) 489#define WCHAR_MAX \ 490 _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) 491 492/* wint_t limits */ 493#undef WINT_MIN 494#undef WINT_MAX 495#define WINT_MIN \ 496 _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) 497#define WINT_MAX \ 498 _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) 499 500#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */ 501 502/* 7.18.4. Macros for integer constants */ 503 504#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS 505 506/* 7.18.4.1. Macros for minimum-width integer constants */ 507/* According to ISO C 99 Technical Corrigendum 1 */ 508 509/* Here we assume a standard architecture where the hardware integer 510 types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ 511 512#undef INT8_C 513#undef UINT8_C 514#define INT8_C(x) x 515#define UINT8_C(x) x 516 517#undef INT16_C 518#undef UINT16_C 519#define INT16_C(x) x 520#define UINT16_C(x) x 521 522#undef INT32_C 523#undef UINT32_C 524#define INT32_C(x) x 525#define UINT32_C(x) x ## U 526 527#undef INT64_C 528#undef UINT64_C 529#if LONG_MAX >> 31 >> 31 == 1 530# define INT64_C(x) x##L 531#elif defined _MSC_VER 532# define INT64_C(x) x##i64 533#elif @HAVE_LONG_LONG_INT@ 534# define INT64_C(x) x##LL 535#endif 536#if ULONG_MAX >> 31 >> 31 >> 1 == 1 537# define UINT64_C(x) x##UL 538#elif defined _MSC_VER 539# define UINT64_C(x) x##ui64 540#elif @HAVE_UNSIGNED_LONG_LONG_INT@ 541# define UINT64_C(x) x##ULL 542#endif 543 544/* 7.18.4.2. Macros for greatest-width integer constants */ 545 546#undef INTMAX_C 547#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 548# define INTMAX_C(x) x##LL 549#elif defined GL_INT64_T 550# define INTMAX_C(x) INT64_C(x) 551#else 552# define INTMAX_C(x) x##L 553#endif 554 555#undef UINTMAX_C 556#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 557# define UINTMAX_C(x) x##ULL 558#elif defined GL_UINT64_T 559# define UINTMAX_C(x) UINT64_C(x) 560#else 561# define UINTMAX_C(x) x##UL 562#endif 563 564#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ 565 566#endif /* _GL_STDINT_H */ 567#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ 568