Remove 'grp' and merge into 'nss' and 'posix'
[platform/upstream/glibc.git] / stdlib / inttypes.h
1 /* Copyright (C) 1997-2023 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    <https://www.gnu.org/licenses/>.  */
17
18 /*
19  *      ISO C99: 7.8 Format conversion of integer types <inttypes.h>
20  */
21
22 #ifndef _INTTYPES_H
23 #define _INTTYPES_H     1
24
25 #include <features.h>
26 /* Get the type definitions.  */
27 #include <stdint.h>
28
29 /* Get a definition for wchar_t.  But we must not define wchar_t itself.  */
30 #ifndef ____gwchar_t_defined
31 # ifdef __cplusplus
32 #  define __gwchar_t wchar_t
33 # elif defined __WCHAR_TYPE__
34 typedef __WCHAR_TYPE__ __gwchar_t;
35 # else
36 #  define __need_wchar_t
37 #  include <stddef.h>
38 typedef wchar_t __gwchar_t;
39 # endif
40 # define ____gwchar_t_defined   1
41 #endif
42
43 # if __WORDSIZE == 64
44 #  define __PRI64_PREFIX        "l"
45 #  define __PRIPTR_PREFIX       "l"
46 # else
47 #  define __PRI64_PREFIX        "ll"
48 #  define __PRIPTR_PREFIX
49 # endif
50
51 /* Macros for printing format specifiers.  */
52
53 /* Decimal notation.  */
54 # define PRId8          "d"
55 # define PRId16         "d"
56 # define PRId32         "d"
57 # define PRId64         __PRI64_PREFIX "d"
58
59 # define PRIdLEAST8     "d"
60 # define PRIdLEAST16    "d"
61 # define PRIdLEAST32    "d"
62 # define PRIdLEAST64    __PRI64_PREFIX "d"
63
64 # define PRIdFAST8      "d"
65 # define PRIdFAST16     __PRIPTR_PREFIX "d"
66 # define PRIdFAST32     __PRIPTR_PREFIX "d"
67 # define PRIdFAST64     __PRI64_PREFIX "d"
68
69
70 # define PRIi8          "i"
71 # define PRIi16         "i"
72 # define PRIi32         "i"
73 # define PRIi64         __PRI64_PREFIX "i"
74
75 # define PRIiLEAST8     "i"
76 # define PRIiLEAST16    "i"
77 # define PRIiLEAST32    "i"
78 # define PRIiLEAST64    __PRI64_PREFIX "i"
79
80 # define PRIiFAST8      "i"
81 # define PRIiFAST16     __PRIPTR_PREFIX "i"
82 # define PRIiFAST32     __PRIPTR_PREFIX "i"
83 # define PRIiFAST64     __PRI64_PREFIX "i"
84
85 /* Octal notation.  */
86 # define PRIo8          "o"
87 # define PRIo16         "o"
88 # define PRIo32         "o"
89 # define PRIo64         __PRI64_PREFIX "o"
90
91 # define PRIoLEAST8     "o"
92 # define PRIoLEAST16    "o"
93 # define PRIoLEAST32    "o"
94 # define PRIoLEAST64    __PRI64_PREFIX "o"
95
96 # define PRIoFAST8      "o"
97 # define PRIoFAST16     __PRIPTR_PREFIX "o"
98 # define PRIoFAST32     __PRIPTR_PREFIX "o"
99 # define PRIoFAST64     __PRI64_PREFIX "o"
100
101 /* Unsigned integers.  */
102 # define PRIu8          "u"
103 # define PRIu16         "u"
104 # define PRIu32         "u"
105 # define PRIu64         __PRI64_PREFIX "u"
106
107 # define PRIuLEAST8     "u"
108 # define PRIuLEAST16    "u"
109 # define PRIuLEAST32    "u"
110 # define PRIuLEAST64    __PRI64_PREFIX "u"
111
112 # define PRIuFAST8      "u"
113 # define PRIuFAST16     __PRIPTR_PREFIX "u"
114 # define PRIuFAST32     __PRIPTR_PREFIX "u"
115 # define PRIuFAST64     __PRI64_PREFIX "u"
116
117 /* lowercase hexadecimal notation.  */
118 # define PRIx8          "x"
119 # define PRIx16         "x"
120 # define PRIx32         "x"
121 # define PRIx64         __PRI64_PREFIX "x"
122
123 # define PRIxLEAST8     "x"
124 # define PRIxLEAST16    "x"
125 # define PRIxLEAST32    "x"
126 # define PRIxLEAST64    __PRI64_PREFIX "x"
127
128 # define PRIxFAST8      "x"
129 # define PRIxFAST16     __PRIPTR_PREFIX "x"
130 # define PRIxFAST32     __PRIPTR_PREFIX "x"
131 # define PRIxFAST64     __PRI64_PREFIX "x"
132
133 /* UPPERCASE hexadecimal notation.  */
134 # define PRIX8          "X"
135 # define PRIX16         "X"
136 # define PRIX32         "X"
137 # define PRIX64         __PRI64_PREFIX "X"
138
139 # define PRIXLEAST8     "X"
140 # define PRIXLEAST16    "X"
141 # define PRIXLEAST32    "X"
142 # define PRIXLEAST64    __PRI64_PREFIX "X"
143
144 # define PRIXFAST8      "X"
145 # define PRIXFAST16     __PRIPTR_PREFIX "X"
146 # define PRIXFAST32     __PRIPTR_PREFIX "X"
147 # define PRIXFAST64     __PRI64_PREFIX "X"
148
149
150 /* Macros for printing `intmax_t' and `uintmax_t'.  */
151 # define PRIdMAX        __PRI64_PREFIX "d"
152 # define PRIiMAX        __PRI64_PREFIX "i"
153 # define PRIoMAX        __PRI64_PREFIX "o"
154 # define PRIuMAX        __PRI64_PREFIX "u"
155 # define PRIxMAX        __PRI64_PREFIX "x"
156 # define PRIXMAX        __PRI64_PREFIX "X"
157
158
159 /* Macros for printing `intptr_t' and `uintptr_t'.  */
160 # define PRIdPTR        __PRIPTR_PREFIX "d"
161 # define PRIiPTR        __PRIPTR_PREFIX "i"
162 # define PRIoPTR        __PRIPTR_PREFIX "o"
163 # define PRIuPTR        __PRIPTR_PREFIX "u"
164 # define PRIxPTR        __PRIPTR_PREFIX "x"
165 # define PRIXPTR        __PRIPTR_PREFIX "X"
166
167 /* Binary notation.  */
168 # if __GLIBC_USE (ISOC2X)
169 #  define PRIb8         "b"
170 #  define PRIb16        "b"
171 #  define PRIb32        "b"
172 #  define PRIb64        __PRI64_PREFIX "b"
173
174 #  define PRIbLEAST8    "b"
175 #  define PRIbLEAST16   "b"
176 #  define PRIbLEAST32   "b"
177 #  define PRIbLEAST64   __PRI64_PREFIX "b"
178
179 #  define PRIbFAST8     "b"
180 #  define PRIbFAST16    __PRIPTR_PREFIX "b"
181 #  define PRIbFAST32    __PRIPTR_PREFIX "b"
182 #  define PRIbFAST64    __PRI64_PREFIX "b"
183
184 #  define PRIbMAX       __PRI64_PREFIX "b"
185 #  define PRIbPTR       __PRIPTR_PREFIX "b"
186
187 #  define PRIB8         "B"
188 #  define PRIB16        "B"
189 #  define PRIB32        "B"
190 #  define PRIB64        __PRI64_PREFIX "B"
191
192 #  define PRIBLEAST8    "B"
193 #  define PRIBLEAST16   "B"
194 #  define PRIBLEAST32   "B"
195 #  define PRIBLEAST64   __PRI64_PREFIX "B"
196
197 #  define PRIBFAST8     "B"
198 #  define PRIBFAST16    __PRIPTR_PREFIX "B"
199 #  define PRIBFAST32    __PRIPTR_PREFIX "B"
200 #  define PRIBFAST64    __PRI64_PREFIX "B"
201
202 #  define PRIBMAX       __PRI64_PREFIX "B"
203 #  define PRIBPTR       __PRIPTR_PREFIX "B"
204 # endif
205
206
207 /* Macros for scanning format specifiers.  */
208
209 /* Signed decimal notation.  */
210 # define SCNd8          "hhd"
211 # define SCNd16         "hd"
212 # define SCNd32         "d"
213 # define SCNd64         __PRI64_PREFIX "d"
214
215 # define SCNdLEAST8     "hhd"
216 # define SCNdLEAST16    "hd"
217 # define SCNdLEAST32    "d"
218 # define SCNdLEAST64    __PRI64_PREFIX "d"
219
220 # define SCNdFAST8      "hhd"
221 # define SCNdFAST16     __PRIPTR_PREFIX "d"
222 # define SCNdFAST32     __PRIPTR_PREFIX "d"
223 # define SCNdFAST64     __PRI64_PREFIX "d"
224
225 /* Signed decimal notation.  */
226 # define SCNi8          "hhi"
227 # define SCNi16         "hi"
228 # define SCNi32         "i"
229 # define SCNi64         __PRI64_PREFIX "i"
230
231 # define SCNiLEAST8     "hhi"
232 # define SCNiLEAST16    "hi"
233 # define SCNiLEAST32    "i"
234 # define SCNiLEAST64    __PRI64_PREFIX "i"
235
236 # define SCNiFAST8      "hhi"
237 # define SCNiFAST16     __PRIPTR_PREFIX "i"
238 # define SCNiFAST32     __PRIPTR_PREFIX "i"
239 # define SCNiFAST64     __PRI64_PREFIX "i"
240
241 /* Unsigned decimal notation.  */
242 # define SCNu8          "hhu"
243 # define SCNu16         "hu"
244 # define SCNu32         "u"
245 # define SCNu64         __PRI64_PREFIX "u"
246
247 # define SCNuLEAST8     "hhu"
248 # define SCNuLEAST16    "hu"
249 # define SCNuLEAST32    "u"
250 # define SCNuLEAST64    __PRI64_PREFIX "u"
251
252 # define SCNuFAST8      "hhu"
253 # define SCNuFAST16     __PRIPTR_PREFIX "u"
254 # define SCNuFAST32     __PRIPTR_PREFIX "u"
255 # define SCNuFAST64     __PRI64_PREFIX "u"
256
257 /* Octal notation.  */
258 # define SCNo8          "hho"
259 # define SCNo16         "ho"
260 # define SCNo32         "o"
261 # define SCNo64         __PRI64_PREFIX "o"
262
263 # define SCNoLEAST8     "hho"
264 # define SCNoLEAST16    "ho"
265 # define SCNoLEAST32    "o"
266 # define SCNoLEAST64    __PRI64_PREFIX "o"
267
268 # define SCNoFAST8      "hho"
269 # define SCNoFAST16     __PRIPTR_PREFIX "o"
270 # define SCNoFAST32     __PRIPTR_PREFIX "o"
271 # define SCNoFAST64     __PRI64_PREFIX "o"
272
273 /* Hexadecimal notation.  */
274 # define SCNx8          "hhx"
275 # define SCNx16         "hx"
276 # define SCNx32         "x"
277 # define SCNx64         __PRI64_PREFIX "x"
278
279 # define SCNxLEAST8     "hhx"
280 # define SCNxLEAST16    "hx"
281 # define SCNxLEAST32    "x"
282 # define SCNxLEAST64    __PRI64_PREFIX "x"
283
284 # define SCNxFAST8      "hhx"
285 # define SCNxFAST16     __PRIPTR_PREFIX "x"
286 # define SCNxFAST32     __PRIPTR_PREFIX "x"
287 # define SCNxFAST64     __PRI64_PREFIX "x"
288
289
290 /* Macros for scanning `intmax_t' and `uintmax_t'.  */
291 # define SCNdMAX        __PRI64_PREFIX "d"
292 # define SCNiMAX        __PRI64_PREFIX "i"
293 # define SCNoMAX        __PRI64_PREFIX "o"
294 # define SCNuMAX        __PRI64_PREFIX "u"
295 # define SCNxMAX        __PRI64_PREFIX "x"
296
297 /* Macros for scanning `intptr_t' and `uintptr_t'.  */
298 # define SCNdPTR        __PRIPTR_PREFIX "d"
299 # define SCNiPTR        __PRIPTR_PREFIX "i"
300 # define SCNoPTR        __PRIPTR_PREFIX "o"
301 # define SCNuPTR        __PRIPTR_PREFIX "u"
302 # define SCNxPTR        __PRIPTR_PREFIX "x"
303
304
305 /* Binary notation.  */
306 # if __GLIBC_USE (ISOC2X)
307 #  define SCNb8         "hhb"
308 #  define SCNb16        "hb"
309 #  define SCNb32        "b"
310 #  define SCNb64        __PRI64_PREFIX "b"
311
312 #  define SCNbLEAST8    "hhb"
313 #  define SCNbLEAST16   "hb"
314 #  define SCNbLEAST32   "b"
315 #  define SCNbLEAST64   __PRI64_PREFIX "b"
316
317 #  define SCNbFAST8     "hhb"
318 #  define SCNbFAST16    __PRIPTR_PREFIX "b"
319 #  define SCNbFAST32    __PRIPTR_PREFIX "b"
320 #  define SCNbFAST64    __PRI64_PREFIX "b"
321
322 #  define SCNbMAX       __PRI64_PREFIX "b"
323 #  define SCNbPTR       __PRIPTR_PREFIX "b"
324 # endif
325
326
327 __BEGIN_DECLS
328
329 #if __WORDSIZE == 64
330
331 /* We have to define the `uintmax_t' type using `ldiv_t'.  */
332 typedef struct
333   {
334     long int quot;              /* Quotient.  */
335     long int rem;               /* Remainder.  */
336   } imaxdiv_t;
337
338 #else
339
340 /* We have to define the `uintmax_t' type using `lldiv_t'.  */
341 typedef struct
342   {
343     __extension__ long long int quot;   /* Quotient.  */
344     __extension__ long long int rem;    /* Remainder.  */
345   } imaxdiv_t;
346
347 #endif
348
349
350 /* Compute absolute value of N.  */
351 extern intmax_t imaxabs (intmax_t __n) __THROW __attribute__ ((__const__));
352
353 /* Return the `imaxdiv_t' representation of the value of NUMER over DENOM. */
354 extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom)
355       __THROW __attribute__ ((__const__));
356
357 /* Like `strtol' but convert to `intmax_t'.  */
358 extern intmax_t strtoimax (const char *__restrict __nptr,
359                            char **__restrict __endptr, int __base) __THROW;
360
361 /* Like `strtoul' but convert to `uintmax_t'.  */
362 extern uintmax_t strtoumax (const char *__restrict __nptr,
363                             char ** __restrict __endptr, int __base) __THROW;
364
365 /* Like `wcstol' but convert to `intmax_t'.  */
366 extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr,
367                            __gwchar_t **__restrict __endptr, int __base)
368      __THROW;
369
370 /* Like `wcstoul' but convert to `uintmax_t'.  */
371 extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr,
372                             __gwchar_t ** __restrict __endptr, int __base)
373      __THROW;
374
375 /* Versions of the above functions that handle '0b' and '0B' prefixes
376    in base 0 or 2.  */
377 #if __GLIBC_USE (C2X_STRTOL)
378 # ifdef __REDIRECT
379 extern intmax_t __REDIRECT_NTH (strtoimax, (const char *__restrict __nptr,
380                                             char **__restrict __endptr,
381                                             int __base), __isoc23_strtoimax);
382 extern uintmax_t __REDIRECT_NTH (strtoumax, (const char *__restrict __nptr,
383                                              char **__restrict __endptr,
384                                              int __base), __isoc23_strtoumax);
385 extern intmax_t __REDIRECT_NTH (wcstoimax,
386                                 (const __gwchar_t *__restrict __nptr,
387                                  __gwchar_t **__restrict __endptr, int __base),
388                                 __isoc23_wcstoimax);
389 extern uintmax_t __REDIRECT_NTH (wcstoumax,
390                                  (const __gwchar_t *__restrict __nptr,
391                                   __gwchar_t **__restrict __endptr, int __base),
392                                  __isoc23_wcstoumax);
393 # else
394 extern intmax_t __isoc23_strtoimax (const char *__restrict __nptr,
395                                     char **__restrict __endptr, int __base)
396      __THROW;
397 extern uintmax_t __isoc23_strtoumax (const char *__restrict __nptr,
398                                      char ** __restrict __endptr, int __base)
399      __THROW;
400 extern intmax_t __isoc23_wcstoimax (const __gwchar_t *__restrict __nptr,
401                                     __gwchar_t **__restrict __endptr,
402                                     int __base)
403      __THROW;
404 extern uintmax_t __isoc23_wcstoumax (const __gwchar_t *__restrict __nptr,
405                                      __gwchar_t ** __restrict __endptr,
406                                      int __base)
407      __THROW;
408 # define strtoimax __isoc23_strtoimax
409 # define strtoumax __isoc23_strtoumax
410 # define wcstoimax __isoc23_wcstoimax
411 # define wcstoumax __isoc23_wcstoumax
412 # endif
413 #endif
414
415 __END_DECLS
416
417 #endif /* inttypes.h */