1    	/* Copyright (C) 1997-2015 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
36   	typedef signed char		int8_t;
37   	typedef short int		int16_t;
38   	typedef int			int32_t;
39   	# if __WORDSIZE == 64
40   	typedef long int		int64_t;
41   	# else
42   	__extension__
43   	typedef long long int		int64_t;
44   	# endif
45   	#endif
46   	
47   	/* Unsigned.  */
48   	typedef unsigned char		uint8_t;
49   	typedef unsigned short int	uint16_t;
50   	#ifndef __uint32_t_defined
51   	typedef unsigned int		uint32_t;
52   	# define __uint32_t_defined
53   	#endif
54   	#if __WORDSIZE == 64
55   	typedef unsigned long int	uint64_t;
56   	#else
57   	__extension__
58   	typedef unsigned long long int	uint64_t;
59   	#endif
60   	
61   	
62   	/* Small types.  */
63   	
64   	/* Signed.  */
65   	typedef signed char		int_least8_t;
66   	typedef short int		int_least16_t;
67   	typedef int			int_least32_t;
68   	#if __WORDSIZE == 64
69   	typedef long int		int_least64_t;
70   	#else
71   	__extension__
72   	typedef long long int		int_least64_t;
73   	#endif
74   	
75   	/* Unsigned.  */
76   	typedef unsigned char		uint_least8_t;
77   	typedef unsigned short int	uint_least16_t;
78   	typedef unsigned int		uint_least32_t;
79   	#if __WORDSIZE == 64
80   	typedef unsigned long int	uint_least64_t;
81   	#else
82   	__extension__
83   	typedef unsigned long long int	uint_least64_t;
84   	#endif
85   	
86   	
87   	/* Fast types.  */
88   	
89   	/* Signed.  */
90   	typedef signed char		int_fast8_t;
91   	#if __WORDSIZE == 64
92   	typedef long int		int_fast16_t;
93   	typedef long int		int_fast32_t;
94   	typedef long int		int_fast64_t;
95   	#else
96   	typedef int			int_fast16_t;
97   	typedef int			int_fast32_t;
98   	__extension__
99   	typedef long long int		int_fast64_t;
100  	#endif
101  	
102  	/* Unsigned.  */
103  	typedef unsigned char		uint_fast8_t;
104  	#if __WORDSIZE == 64
105  	typedef unsigned long int	uint_fast16_t;
106  	typedef unsigned long int	uint_fast32_t;
107  	typedef unsigned long int	uint_fast64_t;
108  	#else
109  	typedef unsigned int		uint_fast16_t;
110  	typedef unsigned int		uint_fast32_t;
111  	__extension__
112  	typedef 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
119  	typedef long int		intptr_t;
120  	#  define __intptr_t_defined
121  	# endif
122  	typedef unsigned long int	uintptr_t;
123  	#else
124  	# ifndef __intptr_t_defined
125  	typedef int			intptr_t;
126  	#  define __intptr_t_defined
127  	# endif
128  	typedef unsigned int		uintptr_t;
129  	#endif
130  	
131  	
132  	/* Largest integral types.  */
133  	#if __WORDSIZE == 64
134  	typedef long int		intmax_t;
135  	typedef unsigned long int	uintmax_t;
136  	#else
137  	__extension__
138  	typedef long long int		intmax_t;
139  	__extension__
140  	typedef 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