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