1/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
17
18/*
19 * ISO C99: 7.18 Integer types <stdint.h>
20 */
21
22#ifndef _STDINT_H
23#define _STDINT_H 1
24
25#include <features.h>
26#include <bits/wchar.h>
27#include <bits/wordsize.h>
28
29/* Exact integral types. */
30
31/* Signed. */
32
33/* There is some amount of overlap with <sys/types.h> as known by inet code */
34#ifndef __int8_t_defined
35# define __int8_t_defined
36typedef signed char int8_t;
37typedef short int int16_t;
38typedef int int32_t;
39# if __WORDSIZE == 64
40typedef long int int64_t;
41# else
42__extension__
43typedef long long int int64_t;
44# endif
45#endif
46
47/* Unsigned. */
48typedef unsigned char uint8_t;
49typedef unsigned short int uint16_t;
50#ifndef __uint32_t_defined
51typedef unsigned int uint32_t;
52# define __uint32_t_defined
53#endif
54#if __WORDSIZE == 64
55typedef unsigned long int uint64_t;
56#else
57__extension__
58typedef unsigned long long int uint64_t;
59#endif
60
61
62/* Small types. */
63
64/* Signed. */
65typedef signed char int_least8_t;
66typedef short int int_least16_t;
67typedef int int_least32_t;
68#if __WORDSIZE == 64
69typedef long int int_least64_t;
70#else
71__extension__
72typedef long long int int_least64_t;
73#endif
74
75/* Unsigned. */
76typedef unsigned char uint_least8_t;
77typedef unsigned short int uint_least16_t;
78typedef unsigned int uint_least32_t;
79#if __WORDSIZE == 64
80typedef unsigned long int uint_least64_t;
81#else
82__extension__
83typedef unsigned long long int uint_least64_t;
84#endif
85
86
87/* Fast types. */
88
89/* Signed. */
90typedef signed char int_fast8_t;
91#if __WORDSIZE == 64
92typedef long int int_fast16_t;
93typedef long int int_fast32_t;
94typedef long int int_fast64_t;
95#else
96typedef int int_fast16_t;
97typedef int int_fast32_t;
98__extension__
99typedef long long int int_fast64_t;
100#endif
101
102/* Unsigned. */
103typedef unsigned char uint_fast8_t;
104#if __WORDSIZE == 64
105typedef unsigned long int uint_fast16_t;
106typedef unsigned long int uint_fast32_t;
107typedef unsigned long int uint_fast64_t;
108#else
109typedef unsigned int uint_fast16_t;
110typedef unsigned int uint_fast32_t;
111__extension__
112typedef unsigned long long int uint_fast64_t;
113#endif
114
115
116/* Types for `void *' pointers. */
117#if __WORDSIZE == 64
118# ifndef __intptr_t_defined
119typedef long int intptr_t;
120# define __intptr_t_defined
121# endif
122typedef unsigned long int uintptr_t;
123#else
124# ifndef __intptr_t_defined
125typedef int intptr_t;
126# define __intptr_t_defined
127# endif
128typedef unsigned int uintptr_t;
129#endif
130
131
132/* Largest integral types. */
133#if __WORDSIZE == 64
134typedef long int intmax_t;
135typedef unsigned long int uintmax_t;
136#else
137__extension__
138typedef long long int intmax_t;
139__extension__
140typedef unsigned long long int uintmax_t;
141#endif
142
143
144# if __WORDSIZE == 64
145# define __INT64_C(c) c ## L
146# define __UINT64_C(c) c ## UL
147# else
148# define __INT64_C(c) c ## LL
149# define __UINT64_C(c) c ## ULL
150# endif
151
152/* Limits of integral types. */
153
154/* Minimum of signed integral types. */
155# define INT8_MIN (-128)
156# define INT16_MIN (-32767-1)
157# define INT32_MIN (-2147483647-1)
158# define INT64_MIN (-__INT64_C(9223372036854775807)-1)
159/* Maximum of signed integral types. */
160# define INT8_MAX (127)
161# define INT16_MAX (32767)
162# define INT32_MAX (2147483647)
163# define INT64_MAX (__INT64_C(9223372036854775807))
164
165/* Maximum of unsigned integral types. */
166# define UINT8_MAX (255)
167# define UINT16_MAX (65535)
168# define UINT32_MAX (4294967295U)
169# define UINT64_MAX (__UINT64_C(18446744073709551615))
170
171
172/* Minimum of signed integral types having a minimum size. */
173# define INT_LEAST8_MIN (-128)
174# define INT_LEAST16_MIN (-32767-1)
175# define INT_LEAST32_MIN (-2147483647-1)
176# define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1)
177/* Maximum of signed integral types having a minimum size. */
178# define INT_LEAST8_MAX (127)
179# define INT_LEAST16_MAX (32767)
180# define INT_LEAST32_MAX (2147483647)
181# define INT_LEAST64_MAX (__INT64_C(9223372036854775807))
182
183/* Maximum of unsigned integral types having a minimum size. */
184# define UINT_LEAST8_MAX (255)
185# define UINT_LEAST16_MAX (65535)
186# define UINT_LEAST32_MAX (4294967295U)
187# define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615))
188
189
190/* Minimum of fast signed integral types having a minimum size. */
191# define INT_FAST8_MIN (-128)
192# if __WORDSIZE == 64
193# define INT_FAST16_MIN (-9223372036854775807L-1)
194# define INT_FAST32_MIN (-9223372036854775807L-1)
195# else
196# define INT_FAST16_MIN (-2147483647-1)
197# define INT_FAST32_MIN (-2147483647-1)
198# endif
199# define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1)
200/* Maximum of fast signed integral types having a minimum size. */
201# define INT_FAST8_MAX (127)
202# if __WORDSIZE == 64
203# define INT_FAST16_MAX (9223372036854775807L)
204# define INT_FAST32_MAX (9223372036854775807L)
205# else
206# define INT_FAST16_MAX (2147483647)
207# define INT_FAST32_MAX (2147483647)
208# endif
209# define INT_FAST64_MAX (__INT64_C(9223372036854775807))
210
211/* Maximum of fast unsigned integral types having a minimum size. */
212# define UINT_FAST8_MAX (255)
213# if __WORDSIZE == 64
214# define UINT_FAST16_MAX (18446744073709551615UL)
215# define UINT_FAST32_MAX (18446744073709551615UL)
216# else
217# define UINT_FAST16_MAX (4294967295U)
218# define UINT_FAST32_MAX (4294967295U)
219# endif
220# define UINT_FAST64_MAX (__UINT64_C(18446744073709551615))
221
222
223/* Values to test for integral types holding `void *' pointer. */
224# if __WORDSIZE == 64
225# define INTPTR_MIN (-9223372036854775807L-1)
226# define INTPTR_MAX (9223372036854775807L)
227# define UINTPTR_MAX (18446744073709551615UL)
228# else
229# define INTPTR_MIN (-2147483647-1)
230# define INTPTR_MAX (2147483647)
231# define UINTPTR_MAX (4294967295U)
232# endif
233
234
235/* Minimum for largest signed integral type. */
236# define INTMAX_MIN (-__INT64_C(9223372036854775807)-1)
237/* Maximum for largest signed integral type. */
238# define INTMAX_MAX (__INT64_C(9223372036854775807))
239
240/* Maximum for largest unsigned integral type. */
241# define UINTMAX_MAX (__UINT64_C(18446744073709551615))
242
243
244/* Limits of other integer types. */
245
246/* Limits of `ptrdiff_t' type. */
247# if __WORDSIZE == 64
248# define PTRDIFF_MIN (-9223372036854775807L-1)
249# define PTRDIFF_MAX (9223372036854775807L)
250# else
251# define PTRDIFF_MIN (-2147483647-1)
252# define PTRDIFF_MAX (2147483647)
253# endif
254
255/* Limits of `sig_atomic_t'. */
256# define SIG_ATOMIC_MIN (-2147483647-1)
257# define SIG_ATOMIC_MAX (2147483647)
258
259/* Limit of `size_t' type. */
260# if __WORDSIZE == 64
261# define SIZE_MAX (18446744073709551615UL)
262# else
263# ifdef __WORDSIZE32_SIZE_ULONG
264# define SIZE_MAX (4294967295UL)
265# else
266# define SIZE_MAX (4294967295U)
267# endif
268# endif
269
270/* Limits of `wchar_t'. */
271# ifndef WCHAR_MIN
272/* These constants might also be defined in <wchar.h>. */
273# define WCHAR_MIN __WCHAR_MIN
274# define WCHAR_MAX __WCHAR_MAX
275# endif
276
277/* Limits of `wint_t'. */
278# define WINT_MIN (0u)
279# define WINT_MAX (4294967295u)
280
281/* Signed. */
282# define INT8_C(c) c
283# define INT16_C(c) c
284# define INT32_C(c) c
285# if __WORDSIZE == 64
286# define INT64_C(c) c ## L
287# else
288# define INT64_C(c) c ## LL
289# endif
290
291/* Unsigned. */
292# define UINT8_C(c) c
293# define UINT16_C(c) c
294# define UINT32_C(c) c ## U
295# if __WORDSIZE == 64
296# define UINT64_C(c) c ## UL
297# else
298# define UINT64_C(c) c ## ULL
299# endif
300
301/* Maximal type. */
302# if __WORDSIZE == 64
303# define INTMAX_C(c) c ## L
304# define UINTMAX_C(c) c ## UL
305# else
306# define INTMAX_C(c) c ## LL
307# define UINTMAX_C(c) c ## ULL
308# endif
309
310#endif /* stdint.h */
311