Annotation of embedaddon/libiconv/srclib/stdint.in.h, revision 1.1.1.1
1.1 misho 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
116: typedef signed char gl_int8_t;
117: typedef 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
123: typedef short int gl_int16_t;
124: typedef 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
130: typedef int gl_int32_t;
131: typedef 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
139: typedef 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
144: typedef __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
149: typedef 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
156: typedef 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
161: typedef 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
166: typedef 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
222: typedef long int gl_int_fast8_t;
223: typedef unsigned long int gl_uint_fast8_t;
224: typedef long int gl_int_fast16_t;
225: typedef unsigned long int gl_uint_fast16_t;
226: typedef long int gl_int_fast32_t;
227: typedef 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
245: typedef long int gl_intptr_t;
246: typedef 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
257: typedef 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
262: typedef 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
268: typedef 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
273: typedef 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. */
280: typedef 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 */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>