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