File: inttypes.h

package info (click to toggle)
picolibc 1.8.11-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 50,064 kB
  • sloc: ansic: 404,031; asm: 24,984; sh: 2,585; python: 2,289; perl: 680; pascal: 329; exp: 287; makefile: 222; cpp: 71; xml: 40
file content (335 lines) | stat: -rw-r--r-- 9,672 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
/*
 * Copyright (c) 2004, 2005 by
 * Ralf Corsepius, Ulm/Germany. All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * is freely granted, provided that this notice is preserved.
 */

/**
 *  @file  inttypes.h
 */

#ifndef _INTTYPES_H
#define _INTTYPES_H

#include <sys/cdefs.h>
#include <stdint.h>
#include <sys/_intsup.h>

_BEGIN_STD_C

#if __BSD_VISIBLE
#include <sys/_locale.h>
#endif

typedef struct {
    intmax_t quot;
    intmax_t rem;
} imaxdiv_t;

/*
 * Try to avoid defining wchar_t by using __WCHAR_TYPE__ when
 * available.
 */

#ifdef __WCHAR_TYPE__
typedef __WCHAR_TYPE__ _wchar_t;
#else
#define __need_wchar_t
#include <stddef.h>
typdef wchar_t _wchar_t;
#endif

#define __STRINGIFY(a) #a

/* 8-bit types */
#define __PRI8(x)      __INT8 __STRINGIFY(x)
#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x)
#define __PRI8FAST(x)  __FAST8 __STRINGIFY(x)

/* NOTICE: scanning 8-bit types requires use of the hh specifier
 * which is only supported on picolibc platforms that
 * are built with C99 I/O format support enabled.  If the flag in
 * picolibc.h hasn't been set during configuration to indicate this, the 8-bit
 * scanning format macros are disabled here as they result in undefined
 * behaviour which can include memory overwrite.  Overriding the flag after the
 * library has been built is not recommended as it will expose the underlying
 * undefined behaviour.
 */

#if defined(__IO_C99_FORMATS)
#define __SCN8(x)      __INT8 __STRINGIFY(x)
#define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x)
#define __SCN8FAST(x)  __FAST8 __STRINGIFY(x)
#endif /* __IO_C99_FORMATS */

#define PRId8 __PRI8(d)
#define PRIi8 __PRI8(i)
#define PRIo8 __PRI8(o)
#define PRIu8 __PRI8(u)
#define PRIx8 __PRI8(x)
#define PRIX8 __PRI8(X)

/* Macros below are only enabled for a newlib built with C99 I/O format support. */
#if defined(__IO_C99_FORMATS)

#define SCNd8 __SCN8(d)
#define SCNi8 __SCN8(i)
#define SCNo8 __SCN8(o)
#define SCNu8 __SCN8(u)
#define SCNx8 __SCN8(x)

#endif /* __IO_C99_FORMATS */

#define PRIdLEAST8 __PRI8LEAST(d)
#define PRIiLEAST8 __PRI8LEAST(i)
#define PRIoLEAST8 __PRI8LEAST(o)
#define PRIuLEAST8 __PRI8LEAST(u)
#define PRIxLEAST8 __PRI8LEAST(x)
#define PRIXLEAST8 __PRI8LEAST(X)

/* Macros below are only enabled for a newlib built with C99 I/O format support. */
#if defined(__IO_C99_FORMATS)

#define SCNdLEAST8 __SCN8LEAST(d)
#define SCNiLEAST8 __SCN8LEAST(i)
#define SCNoLEAST8 __SCN8LEAST(o)
#define SCNuLEAST8 __SCN8LEAST(u)
#define SCNxLEAST8 __SCN8LEAST(x)

#endif /* __IO_C99_FORMATS */

#define PRIdFAST8 __PRI8FAST(d)
#define PRIiFAST8 __PRI8FAST(i)
#define PRIoFAST8 __PRI8FAST(o)
#define PRIuFAST8 __PRI8FAST(u)
#define PRIxFAST8 __PRI8FAST(x)
#define PRIXFAST8 __PRI8FAST(X)

/* Macros below are only enabled for a newlib built with C99 I/O format support. */
#if defined(__IO_C99_FORMATS)

#define SCNdFAST8 __SCN8FAST(d)
#define SCNiFAST8 __SCN8FAST(i)
#define SCNoFAST8 __SCN8FAST(o)
#define SCNuFAST8 __SCN8FAST(u)
#define SCNxFAST8 __SCN8FAST(x)

#endif /* __IO_C99_FORMATS */

/* 16-bit types */
#define __PRI16(x)      __INT16 __STRINGIFY(x)
#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x)
#define __PRI16FAST(x)  __FAST16 __STRINGIFY(x)
#define __SCN16(x)      __INT16 __STRINGIFY(x)
#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x)
#define __SCN16FAST(x)  __FAST16 __STRINGIFY(x)

#define PRId16          __PRI16(d)
#define PRIi16          __PRI16(i)
#define PRIo16          __PRI16(o)
#define PRIu16          __PRI16(u)
#define PRIx16          __PRI16(x)
#define PRIX16          __PRI16(X)

#define SCNd16          __SCN16(d)
#define SCNi16          __SCN16(i)
#define SCNo16          __SCN16(o)
#define SCNu16          __SCN16(u)
#define SCNx16          __SCN16(x)

#define PRIdLEAST16     __PRI16LEAST(d)
#define PRIiLEAST16     __PRI16LEAST(i)
#define PRIoLEAST16     __PRI16LEAST(o)
#define PRIuLEAST16     __PRI16LEAST(u)
#define PRIxLEAST16     __PRI16LEAST(x)
#define PRIXLEAST16     __PRI16LEAST(X)

#define SCNdLEAST16     __SCN16LEAST(d)
#define SCNiLEAST16     __SCN16LEAST(i)
#define SCNoLEAST16     __SCN16LEAST(o)
#define SCNuLEAST16     __SCN16LEAST(u)
#define SCNxLEAST16     __SCN16LEAST(x)

#define PRIdFAST16      __PRI16FAST(d)
#define PRIiFAST16      __PRI16FAST(i)
#define PRIoFAST16      __PRI16FAST(o)
#define PRIuFAST16      __PRI16FAST(u)
#define PRIxFAST16      __PRI16FAST(x)
#define PRIXFAST16      __PRI16FAST(X)

#define SCNdFAST16      __SCN16FAST(d)
#define SCNiFAST16      __SCN16FAST(i)
#define SCNoFAST16      __SCN16FAST(o)
#define SCNuFAST16      __SCN16FAST(u)
#define SCNxFAST16      __SCN16FAST(x)

/* 32-bit types */
#define __PRI32(x)      __INT32 __STRINGIFY(x)
#define __SCN32(x)      __INT32 __STRINGIFY(x)
#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x)
#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x)
#define __PRI32FAST(x)  __FAST32 __STRINGIFY(x)
#define __SCN32FAST(x)  __FAST32 __STRINGIFY(x)

#define PRId32          __PRI32(d)
#define PRIi32          __PRI32(i)
#define PRIo32          __PRI32(o)
#define PRIu32          __PRI32(u)
#define PRIx32          __PRI32(x)
#define PRIX32          __PRI32(X)

#define SCNd32          __SCN32(d)
#define SCNi32          __SCN32(i)
#define SCNo32          __SCN32(o)
#define SCNu32          __SCN32(u)
#define SCNx32          __SCN32(x)

#define PRIdLEAST32     __PRI32LEAST(d)
#define PRIiLEAST32     __PRI32LEAST(i)
#define PRIoLEAST32     __PRI32LEAST(o)
#define PRIuLEAST32     __PRI32LEAST(u)
#define PRIxLEAST32     __PRI32LEAST(x)
#define PRIXLEAST32     __PRI32LEAST(X)

#define SCNdLEAST32     __SCN32LEAST(d)
#define SCNiLEAST32     __SCN32LEAST(i)
#define SCNoLEAST32     __SCN32LEAST(o)
#define SCNuLEAST32     __SCN32LEAST(u)
#define SCNxLEAST32     __SCN32LEAST(x)

#define PRIdFAST32      __PRI32FAST(d)
#define PRIiFAST32      __PRI32FAST(i)
#define PRIoFAST32      __PRI32FAST(o)
#define PRIuFAST32      __PRI32FAST(u)
#define PRIxFAST32      __PRI32FAST(x)
#define PRIXFAST32      __PRI32FAST(X)

#define SCNdFAST32      __SCN32FAST(d)
#define SCNiFAST32      __SCN32FAST(i)
#define SCNoFAST32      __SCN32FAST(o)
#define SCNuFAST32      __SCN32FAST(u)
#define SCNxFAST32      __SCN32FAST(x)

/* 64-bit types */
#define __PRI64(x)      __INT64 __STRINGIFY(x)
#define __SCN64(x)      __INT64 __STRINGIFY(x)

#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x)
#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x)
#define __PRI64FAST(x)  __FAST64 __STRINGIFY(x)
#define __SCN64FAST(x)  __FAST64 __STRINGIFY(x)

#if __int64_t_defined
#define PRId64 __PRI64(d)
#define PRIi64 __PRI64(i)
#define PRIo64 __PRI64(o)
#define PRIu64 __PRI64(u)
#define PRIx64 __PRI64(x)
#define PRIX64 __PRI64(X)

#define SCNd64 __SCN64(d)
#define SCNi64 __SCN64(i)
#define SCNo64 __SCN64(o)
#define SCNu64 __SCN64(u)
#define SCNx64 __SCN64(x)
#endif

#if __int_least64_t_defined
#define PRIdLEAST64 __PRI64LEAST(d)
#define PRIiLEAST64 __PRI64LEAST(i)
#define PRIoLEAST64 __PRI64LEAST(o)
#define PRIuLEAST64 __PRI64LEAST(u)
#define PRIxLEAST64 __PRI64LEAST(x)
#define PRIXLEAST64 __PRI64LEAST(X)

#define SCNdLEAST64 __SCN64LEAST(d)
#define SCNiLEAST64 __SCN64LEAST(i)
#define SCNoLEAST64 __SCN64LEAST(o)
#define SCNuLEAST64 __SCN64LEAST(u)
#define SCNxLEAST64 __SCN64LEAST(x)
#endif

#if __int_fast64_t_defined
#define PRIdFAST64 __PRI64FAST(d)
#define PRIiFAST64 __PRI64FAST(i)
#define PRIoFAST64 __PRI64FAST(o)
#define PRIuFAST64 __PRI64FAST(u)
#define PRIxFAST64 __PRI64FAST(x)
#define PRIXFAST64 __PRI64FAST(X)

#define SCNdFAST64 __SCN64FAST(d)
#define SCNiFAST64 __SCN64FAST(i)
#define SCNoFAST64 __SCN64FAST(o)
#define SCNuFAST64 __SCN64FAST(u)
#define SCNxFAST64 __SCN64FAST(x)
#endif

/* max-bit types */
#if __have_long64
#define __PRIMAX(x) __STRINGIFY(l##x)
#define __SCNMAX(x) __STRINGIFY(l##x)
#elif __have_longlong64
#define __PRIMAX(x) __STRINGIFY(ll##x)
#define __SCNMAX(x) __STRINGIFY(ll##x)
#else
#define __PRIMAX(x) __STRINGIFY(x)
#define __SCNMAX(x) __STRINGIFY(x)
#endif

#define PRIdMAX __PRIMAX(d)
#define PRIiMAX __PRIMAX(i)
#define PRIoMAX __PRIMAX(o)
#define PRIuMAX __PRIMAX(u)
#define PRIxMAX __PRIMAX(x)
#define PRIXMAX __PRIMAX(X)

#define SCNdMAX __SCNMAX(d)
#define SCNiMAX __SCNMAX(i)
#define SCNoMAX __SCNMAX(o)
#define SCNuMAX __SCNMAX(u)
#define SCNxMAX __SCNMAX(x)

/* ptr types */
#if defined(_INTPTR_EQ_LONGLONG)
#define __PRIPTR(x) __STRINGIFY(ll##x)
#define __SCNPTR(x) __STRINGIFY(ll##x)
#elif defined(_INTPTR_EQ_LONG)
#define __PRIPTR(x) __STRINGIFY(l##x)
#define __SCNPTR(x) __STRINGIFY(l##x)
#else
#define __PRIPTR(x) __STRINGIFY(x)
#define __SCNPTR(x) __STRINGIFY(x)
#endif

#define PRIdPTR __PRIPTR(d)
#define PRIiPTR __PRIPTR(i)
#define PRIoPTR __PRIPTR(o)
#define PRIuPTR __PRIPTR(u)
#define PRIxPTR __PRIPTR(x)
#define PRIXPTR __PRIPTR(X)

#define SCNdPTR __SCNPTR(d)
#define SCNiPTR __SCNPTR(i)
#define SCNoPTR __SCNPTR(o)
#define SCNuPTR __SCNPTR(u)
#define SCNxPTR __SCNPTR(x)

intmax_t  imaxabs(intmax_t);
imaxdiv_t imaxdiv(intmax_t __numer, intmax_t __denomer);
intmax_t  strtoimax(const char  *__restrict, char  **__restrict, int);
uintmax_t strtoumax(const char * __restrict, char ** __restrict, int);
intmax_t  wcstoimax(const _wchar_t  *__restrict, _wchar_t  **__restrict, int);
uintmax_t wcstoumax(const _wchar_t * __restrict, _wchar_t ** __restrict, int);

#if __BSD_VISIBLE
intmax_t  strtoimax_l(const char  *__restrict, char **_restrict, int, locale_t);
uintmax_t strtoumax_l(const char * __restrict, char **_restrict, int, locale_t);
intmax_t  wcstoimax_l(const _wchar_t  *__restrict, _wchar_t **_restrict, int, locale_t);
uintmax_t wcstoumax_l(const _wchar_t * __restrict, _wchar_t **_restrict, int, locale_t);
#endif

_END_STD_C

#endif