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