1 #pragma once
2 
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 #include <stdint.h>
8 
9 #define __NEED_wchar_t
10 #include <bits/alltypes.h>
11 
12 typedef struct { intmax_t quot, rem; } imaxdiv_t;
13 
14 intmax_t imaxabs(intmax_t);
15 imaxdiv_t imaxdiv(intmax_t, intmax_t);
16 
17 intmax_t strtoimax(const char* __restrict, char** __restrict, int);
18 uintmax_t strtoumax(const char* __restrict, char** __restrict, int);
19 
20 intmax_t wcstoimax(const wchar_t* __restrict, wchar_t** __restrict, int);
21 uintmax_t wcstoumax(const wchar_t* __restrict, wchar_t** __restrict, int);
22 
23 // Clang predefines macros __<type>_FMT<letter>__ for each type,
24 // with <letter> being i and for signed types, and o, u, x, and X
25 // for unsigned types.  That lets <inttypes.h> do its work without
26 // any special knowledge of what the underlying types are.
27 // Unfortunately, GCC does not define these macros.
28 #ifndef __INTMAX_FMTd__
29 
30 #define __INT8_FMT_MODIFIER__ "hh"
31 #define __INT16_FMT_MODIFIER__ "h"
32 #define __INT32_FMT_MODIFIER__ ""
33 
34 #define __INT_LEAST8_FMT_MODIFIER__ __INT8_FMT_MODIFIER__
35 #define __INT_LEAST16_FMT_MODIFIER__ __INT16_FMT_MODIFIER__
36 #define __INT_LEAST32_FMT_MODIFIER__ __INT32_FMT_MODIFIER__
37 #define __INT_LEAST64_FMT_MODIFIER__ __INT64_FMT_MODIFIER__
38 
39 // The *-elf and arm-eabi GCC targets use 'int' for the fast{8,16,32}
40 // types. On LP64 systems, 'long' is used for the fast64 type.
41 #define __INT_FAST8_FMT_MODIFIER__ ""
42 #define __INT_FAST16_FMT_MODIFIER__ ""
43 #define __INT_FAST32_FMT_MODIFIER__ ""
44 #define __INT_FAST64_FMT_MODIFIER__ "l"
45 
46 // On machines where 'long' types are 64 bits, the compiler defines
47 // __INT64_TYPE__ et al using 'long', not 'long long', though both are
48 // 64-bit types.
49 #define __INT64_FMT_MODIFIER__ "l"
50 #define __INTPTR_FMT_MODIFIER__ "l"
51 
52 #define __INTMAX_FMT_MODIFIER__ __INT64_FMT_MODIFIER__
53 
54 #define __INTMAX_FMTd__ __INTMAX_FMT_MODIFIER__ "d"
55 #define __INTMAX_FMTi__ __INTMAX_FMT_MODIFIER__ "i"
56 #define __UINTMAX_FMTo__ __INTMAX_FMT_MODIFIER__ "o"
57 #define __UINTMAX_FMTu__ __INTMAX_FMT_MODIFIER__ "u"
58 #define __UINTMAX_FMTx__ __INTMAX_FMT_MODIFIER__ "x"
59 #define __UINTMAX_FMTX__ __INTMAX_FMT_MODIFIER__ "X"
60 #define __INTPTR_FMTd__ __INTPTR_FMT_MODIFIER__ "d"
61 #define __INTPTR_FMTi__ __INTPTR_FMT_MODIFIER__ "i"
62 #define __UINTPTR_FMTo__ __INTPTR_FMT_MODIFIER__ "o"
63 #define __UINTPTR_FMTu__ __INTPTR_FMT_MODIFIER__ "u"
64 #define __UINTPTR_FMTx__ __INTPTR_FMT_MODIFIER__ "x"
65 #define __UINTPTR_FMTX__ __INTPTR_FMT_MODIFIER__ "X"
66 #define __INT8_FMTd__ __INT8_FMT_MODIFIER__ "d"
67 #define __INT8_FMTi__ __INT8_FMT_MODIFIER__ "i"
68 #define __INT16_FMTd__ __INT16_FMT_MODIFIER__ "d"
69 #define __INT16_FMTi__ __INT16_FMT_MODIFIER__ "i"
70 #define __INT32_FMTd__ __INT32_FMT_MODIFIER__ "d"
71 #define __INT32_FMTi__ __INT32_FMT_MODIFIER__ "i"
72 #define __INT64_FMTd__ __INT64_FMT_MODIFIER__ "d"
73 #define __INT64_FMTi__ __INT64_FMT_MODIFIER__ "i"
74 #define __UINT8_FMTo__ __INT8_FMT_MODIFIER__ "o"
75 #define __UINT8_FMTu__ __INT8_FMT_MODIFIER__ "u"
76 #define __UINT8_FMTx__ __INT8_FMT_MODIFIER__ "x"
77 #define __UINT8_FMTX__ __INT8_FMT_MODIFIER__ "X"
78 #define __UINT16_FMTo__ __INT16_FMT_MODIFIER__ "o"
79 #define __UINT16_FMTu__ __INT16_FMT_MODIFIER__ "u"
80 #define __UINT16_FMTx__ __INT16_FMT_MODIFIER__ "x"
81 #define __UINT16_FMTX__ __INT16_FMT_MODIFIER__ "X"
82 #define __UINT32_FMTo__ __INT32_FMT_MODIFIER__ "o"
83 #define __UINT32_FMTu__ __INT32_FMT_MODIFIER__ "u"
84 #define __UINT32_FMTx__ __INT32_FMT_MODIFIER__ "x"
85 #define __UINT32_FMTX__ __INT32_FMT_MODIFIER__ "X"
86 #define __UINT64_FMTo__ __INT64_FMT_MODIFIER__ "o"
87 #define __UINT64_FMTu__ __INT64_FMT_MODIFIER__ "u"
88 #define __UINT64_FMTx__ __INT64_FMT_MODIFIER__ "x"
89 #define __UINT64_FMTX__ __INT64_FMT_MODIFIER__ "X"
90 #define __INT_LEAST8_FMTd__ __INT_LEAST8_FMT_MODIFIER__ "d"
91 #define __INT_LEAST8_FMTi__ __INT_LEAST8_FMT_MODIFIER__ "i"
92 #define __UINT_LEAST8_FMTo__ __INT_LEAST8_FMT_MODIFIER__ "o"
93 #define __UINT_LEAST8_FMTu__ __INT_LEAST8_FMT_MODIFIER__ "u"
94 #define __UINT_LEAST8_FMTx__ __INT_LEAST8_FMT_MODIFIER__ "x"
95 #define __UINT_LEAST8_FMTX__ __INT_LEAST8_FMT_MODIFIER__ "X"
96 #define __INT_LEAST16_FMTd__ __INT_LEAST16_FMT_MODIFIER__ "d"
97 #define __INT_LEAST16_FMTi__ __INT_LEAST16_FMT_MODIFIER__ "i"
98 #define __UINT_LEAST16_FMTo__ __INT_LEAST16_FMT_MODIFIER__ "o"
99 #define __UINT_LEAST16_FMTu__ __INT_LEAST16_FMT_MODIFIER__ "u"
100 #define __UINT_LEAST16_FMTx__ __INT_LEAST16_FMT_MODIFIER__ "x"
101 #define __UINT_LEAST16_FMTX__ __INT_LEAST16_FMT_MODIFIER__ "X"
102 #define __INT_LEAST32_FMTd__ __INT_LEAST32_FMT_MODIFIER__ "d"
103 #define __INT_LEAST32_FMTi__ __INT_LEAST32_FMT_MODIFIER__ "i"
104 #define __UINT_LEAST32_FMTo__ __INT_LEAST32_FMT_MODIFIER__ "o"
105 #define __UINT_LEAST32_FMTu__ __INT_LEAST32_FMT_MODIFIER__ "u"
106 #define __UINT_LEAST32_FMTx__ __INT_LEAST32_FMT_MODIFIER__ "x"
107 #define __UINT_LEAST32_FMTX__ __INT_LEAST32_FMT_MODIFIER__ "X"
108 #define __INT_LEAST64_FMTd__ __INT_LEAST64_FMT_MODIFIER__ "d"
109 #define __INT_LEAST64_FMTi__ __INT_LEAST64_FMT_MODIFIER__ "i"
110 #define __UINT_LEAST64_FMTo__ __INT_LEAST64_FMT_MODIFIER__ "o"
111 #define __UINT_LEAST64_FMTu__ __INT_LEAST64_FMT_MODIFIER__ "u"
112 #define __UINT_LEAST64_FMTx__ __INT_LEAST64_FMT_MODIFIER__ "x"
113 #define __UINT_LEAST64_FMTX__ __INT_LEAST64_FMT_MODIFIER__ "X"
114 #define __INT_FAST8_FMTd__ __INT_FAST8_FMT_MODIFIER__ "d"
115 #define __INT_FAST8_FMTi__ __INT_FAST8_FMT_MODIFIER__ "i"
116 #define __UINT_FAST8_FMTo__ __INT_FAST8_FMT_MODIFIER__ "o"
117 #define __UINT_FAST8_FMTu__ __INT_FAST8_FMT_MODIFIER__ "u"
118 #define __UINT_FAST8_FMTx__ __INT_FAST8_FMT_MODIFIER__ "x"
119 #define __UINT_FAST8_FMTX__ __INT_FAST8_FMT_MODIFIER__ "X"
120 #define __INT_FAST16_FMTd__ __INT_FAST16_FMT_MODIFIER__ "d"
121 #define __INT_FAST16_FMTi__ __INT_FAST16_FMT_MODIFIER__ "i"
122 #define __UINT_FAST16_FMTo__ __INT_FAST16_FMT_MODIFIER__ "o"
123 #define __UINT_FAST16_FMTu__ __INT_FAST16_FMT_MODIFIER__ "u"
124 #define __UINT_FAST16_FMTx__ __INT_FAST16_FMT_MODIFIER__ "x"
125 #define __UINT_FAST16_FMTX__ __INT_FAST16_FMT_MODIFIER__ "X"
126 #define __INT_FAST32_FMTd__ __INT_FAST32_FMT_MODIFIER__ "d"
127 #define __INT_FAST32_FMTi__ __INT_FAST32_FMT_MODIFIER__ "i"
128 #define __UINT_FAST32_FMTo__ __INT_FAST32_FMT_MODIFIER__ "o"
129 #define __UINT_FAST32_FMTu__ __INT_FAST32_FMT_MODIFIER__ "u"
130 #define __UINT_FAST32_FMTx__ __INT_FAST32_FMT_MODIFIER__ "x"
131 #define __UINT_FAST32_FMTX__ __INT_FAST32_FMT_MODIFIER__ "X"
132 #define __INT_FAST64_FMTd__ __INT_FAST64_FMT_MODIFIER__ "d"
133 #define __INT_FAST64_FMTi__ __INT_FAST64_FMT_MODIFIER__ "i"
134 #define __UINT_FAST64_FMTo__ __INT_FAST64_FMT_MODIFIER__ "o"
135 #define __UINT_FAST64_FMTu__ __INT_FAST64_FMT_MODIFIER__ "u"
136 #define __UINT_FAST64_FMTx__ __INT_FAST64_FMT_MODIFIER__ "x"
137 #define __UINT_FAST64_FMTX__ __INT_FAST64_FMT_MODIFIER__ "X"
138 
139 #endif
140 
141 
142 #define PRId8 __INT8_FMTd__
143 #define PRId16 __INT16_FMTd__
144 #define PRId32 __INT32_FMTd__
145 #define PRId64 __INT64_FMTd__
146 
147 #define PRIdLEAST8 __INT_LEAST8_FMTd__
148 #define PRIdLEAST16 __INT_LEAST16_FMTd__
149 #define PRIdLEAST32 __INT_LEAST32_FMTd__
150 #define PRIdLEAST64 __INT_LEAST64_FMTd__
151 
152 #define PRIdFAST8 __INT_FAST8_FMTd__
153 #define PRIdFAST16 __INT_FAST16_FMTd__
154 #define PRIdFAST32 __INT_FAST32_FMTd__
155 #define PRIdFAST64 __INT_FAST64_FMTd__
156 
157 #define PRIi8 __INT8_FMTi__
158 #define PRIi16 __INT16_FMTi__
159 #define PRIi32 __INT32_FMTi__
160 #define PRIi64 __INT64_FMTi__
161 
162 #define PRIiLEAST8 __INT_LEAST8_FMTi__
163 #define PRIiLEAST16 __INT_LEAST16_FMTi__
164 #define PRIiLEAST32 __INT_LEAST32_FMTi__
165 #define PRIiLEAST64 __INT_LEAST64_FMTi__
166 
167 #define PRIiFAST8 __INT_FAST8_FMTi__
168 #define PRIiFAST16 __INT_FAST16_FMTi__
169 #define PRIiFAST32 __INT_FAST32_FMTi__
170 #define PRIiFAST64 __INT_FAST64_FMTi__
171 
172 #define PRIo8 __UINT8_FMTo__
173 #define PRIo16 __UINT16_FMTo__
174 #define PRIo32 __UINT32_FMTo__
175 #define PRIo64 __UINT64_FMTo__
176 
177 #define PRIoLEAST8 __UINT_LEAST8_FMTo__
178 #define PRIoLEAST16 __UINT_LEAST16_FMTo__
179 #define PRIoLEAST32 __UINT_LEAST32_FMTo__
180 #define PRIoLEAST64 __UINT_LEAST64_FMTo__
181 
182 #define PRIoFAST8 __UINT_FAST8_FMTo__
183 #define PRIoFAST16 __UINT_FAST16_FMTo__
184 #define PRIoFAST32 __UINT_FAST32_FMTo__
185 #define PRIoFAST64 __UINT_FAST64_FMTo__
186 
187 #define PRIu8 __UINT8_FMTu__
188 #define PRIu16 __UINT16_FMTu__
189 #define PRIu32 __UINT32_FMTu__
190 #define PRIu64 __UINT64_FMTu__
191 
192 #define PRIuLEAST8 __UINT_LEAST8_FMTu__
193 #define PRIuLEAST16 __UINT_LEAST16_FMTu__
194 #define PRIuLEAST32 __UINT_LEAST32_FMTu__
195 #define PRIuLEAST64 __UINT_LEAST64_FMTu__
196 
197 #define PRIuFAST8 __UINT_FAST8_FMTu__
198 #define PRIuFAST16 __UINT_FAST16_FMTu__
199 #define PRIuFAST32 __UINT_FAST32_FMTu__
200 #define PRIuFAST64 __UINT_FAST64_FMTu__
201 
202 #define PRIx8 __UINT8_FMTx__
203 #define PRIx16 __UINT16_FMTx__
204 #define PRIx32 __UINT32_FMTx__
205 #define PRIx64 __UINT64_FMTx__
206 
207 #define PRIxLEAST8 __UINT_LEAST8_FMTx__
208 #define PRIxLEAST16 __UINT_LEAST16_FMTx__
209 #define PRIxLEAST32 __UINT_LEAST32_FMTx__
210 #define PRIxLEAST64 __UINT_LEAST64_FMTx__
211 
212 #define PRIxFAST8 __UINT_FAST8_FMTx__
213 #define PRIxFAST16 __UINT_FAST16_FMTx__
214 #define PRIxFAST32 __UINT_FAST32_FMTx__
215 #define PRIxFAST64 __UINT_FAST64_FMTx__
216 
217 #define PRIX8 __UINT8_FMTX__
218 #define PRIX16 __UINT16_FMTX__
219 #define PRIX32 __UINT32_FMTX__
220 #define PRIX64 __UINT64_FMTX__
221 
222 #define PRIXLEAST8 __UINT_LEAST8_FMTX__
223 #define PRIXLEAST16 __UINT_LEAST16_FMTX__
224 #define PRIXLEAST32 __UINT_LEAST32_FMTX__
225 #define PRIXLEAST64 __UINT_LEAST64_FMTX__
226 
227 #define PRIXFAST8 __UINT_FAST8_FMTX__
228 #define PRIXFAST16 __UINT_FAST16_FMTX__
229 #define PRIXFAST32 __UINT_FAST32_FMTX__
230 #define PRIXFAST64 __UINT_FAST64_FMTX__
231 
232 #define PRIdMAX __INTMAX_FMTd__
233 #define PRIiMAX __INTMAX_FMTi__
234 #define PRIoMAX __UINTMAX_FMTo__
235 #define PRIuMAX __UINTMAX_FMTu__
236 #define PRIxMAX __UINTMAX_FMTx__
237 #define PRIXMAX __UINTMAX_FMTX__
238 
239 #define PRIdPTR __INTPTR_FMTd__
240 #define PRIiPTR __INTPTR_FMTi__
241 #define PRIoPTR __UINTPTR_FMTo__
242 #define PRIuPTR __UINTPTR_FMTu__
243 #define PRIxPTR __UINTPTR_FMTx__
244 #define PRIXPTR __UINTPTR_FMTX__
245 
246 #define SCNd8 __INT8_FMTd__
247 #define SCNd16 __INT16_FMTd__
248 #define SCNd32 __INT32_FMTd__
249 #define SCNd64 __INT64_FMTd__
250 
251 #define SCNdLEAST8 __INT_LEAST8_FMTd__
252 #define SCNdLEAST16 __INT_LEAST16_FMTd__
253 #define SCNdLEAST32 __INT_LEAST32_FMTd__
254 #define SCNdLEAST64 __INT_LEAST64_FMTd__
255 
256 #define SCNdFAST8 __INT_FAST8_FMTd__
257 #define SCNdFAST16 __INT_FAST16_FMTd__
258 #define SCNdFAST32 __INT_FAST32_FMTd__
259 #define SCNdFAST64 __INT_FAST64_FMTd__
260 
261 #define SCNi8 __INT8_FMTi__
262 #define SCNi16 __INT16_FMTi__
263 #define SCNi32 __INT32_FMTi__
264 #define SCNi64 __INT64_FMTi__
265 
266 #define SCNiLEAST8 __INT_LEAST8_FMTi__
267 #define SCNiLEAST16 __INT_LEAST16_FMTi__
268 #define SCNiLEAST32 __INT_LEAST32_FMTi__
269 #define SCNiLEAST64 __INT_LEAST64_FMTi__
270 
271 #define SCNiFAST8 __INT_FAST8_FMTi__
272 #define SCNiFAST16 __INT_FAST16_FMTi__
273 #define SCNiFAST32 __INT_FAST32_FMTi__
274 #define SCNiFAST64 __INT_FAST64_FMTi__
275 
276 #define SCNo8 __UINT8_FMTo__
277 #define SCNo16 __UINT16_FMTo__
278 #define SCNo32 __UINT32_FMTo__
279 #define SCNo64 __UINT64_FMTo__
280 
281 #define SCNoLEAST8 __UINT_LEAST8_FMTo__
282 #define SCNoLEAST16 __UINT_LEAST16_FMTo__
283 #define SCNoLEAST32 __UINT_LEAST32_FMTo__
284 #define SCNoLEAST64 __UINT_LEAST64_FMTo__
285 
286 #define SCNoFAST8 __UINT_FAST8_FMTo__
287 #define SCNoFAST16 __UINT_FAST16_FMTo__
288 #define SCNoFAST32 __UINT_FAST32_FMTo__
289 #define SCNoFAST64 __UINT_FAST64_FMTo__
290 
291 #define SCNu8 __UINT8_FMTu__
292 #define SCNu16 __UINT16_FMTu__
293 #define SCNu32 __UINT32_FMTu__
294 #define SCNu64 __UINT64_FMTu__
295 
296 #define SCNuLEAST8 __UINT_LEAST8_FMTu__
297 #define SCNuLEAST16 __UINT_LEAST16_FMTu__
298 #define SCNuLEAST32 __UINT_LEAST32_FMTu__
299 #define SCNuLEAST64 __UINT_LEAST64_FMTu__
300 
301 #define SCNuFAST8 __UINT_FAST8_FMTu__
302 #define SCNuFAST16 __UINT_FAST16_FMTu__
303 #define SCNuFAST32 __UINT_FAST32_FMTu__
304 #define SCNuFAST64 __UINT_FAST64_FMTu__
305 
306 #define SCNx8 __UINT8_FMTx__
307 #define SCNx16 __UINT16_FMTx__
308 #define SCNx32 __UINT32_FMTx__
309 #define SCNx64 __UINT64_FMTx__
310 
311 #define SCNxLEAST8 __UINT_LEAST8_FMTx__
312 #define SCNxLEAST16 __UINT_LEAST16_FMTx__
313 #define SCNxLEAST32 __UINT_LEAST32_FMTx__
314 #define SCNxLEAST64 __UINT_LEAST64_FMTx__
315 
316 #define SCNxFAST8 __UINT_FAST8_FMTx__
317 #define SCNxFAST16 __UINT_FAST16_FMTx__
318 #define SCNxFAST32 __UINT_FAST32_FMTx__
319 #define SCNxFAST64 __UINT_FAST64_FMTx__
320 
321 #define SCNX8 __UINT8_FMTX__
322 #define SCNX16 __UINT16_FMTX__
323 #define SCNX32 __UINT32_FMTX__
324 #define SCNX64 __UINT64_FMTX__
325 
326 #define SCNXLEAST8 __UINT_LEAST8_FMTX__
327 #define SCNXLEAST16 __UINT_LEAST16_FMTX__
328 #define SCNXLEAST32 __UINT_LEAST32_FMTX__
329 #define SCNXLEAST64 __UINT_LEAST64_FMTX__
330 
331 #define SCNXFAST8 __UINT_FAST8_FMTX__
332 #define SCNXFAST16 __UINT_FAST16_FMTX__
333 #define SCNXFAST32 __UINT_FAST32_FMTX__
334 #define SCNXFAST64 __UINT_FAST64_FMTX__
335 
336 #define SCNdMAX __INTMAX_FMTd__
337 #define SCNiMAX __INTMAX_FMTi__
338 #define SCNoMAX __UINTMAX_FMTo__
339 #define SCNuMAX __UINTMAX_FMTu__
340 #define SCNxMAX __UINTMAX_FMTx__
341 #define SCNXMAX __UINTMAX_FMTX__
342 
343 #define SCNdPTR __INTPTR_FMTd__
344 #define SCNiPTR __INTPTR_FMTi__
345 #define SCNoPTR __UINTPTR_FMTo__
346 #define SCNuPTR __UINTPTR_FMTu__
347 #define SCNxPTR __UINTPTR_FMTx__
348 #define SCNXPTR __UINTPTR_FMTX__
349 
350 #ifdef __cplusplus
351 }
352 #endif
353