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