Annotation of src/include/inttypes.h, Revision 1.9
1.8 millert 1: /* $OpenBSD: inttypes.h,v 1.7 2006/01/13 17:58:09 millert Exp $ */
1.1 millert 2:
3: /*
1.6 millert 4: * Copyright (c) 1997, 2005 Todd C. Miller <Todd.Miller@courtesan.com>
1.1 millert 5: *
1.4 millert 6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
1.1 millert 9: *
1.5 millert 10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1.1 millert 17: */
18:
1.6 millert 19: #ifndef _INTTYPES_H_
20: #define _INTTYPES_H_
1.1 millert 21:
1.6 millert 22: #include <sys/stdint.h>
1.1 millert 23:
1.6 millert 24: #if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
25: /*
26: * 7.8.1 Macros for format specifiers
27: *
28: * Each of the following object-like macros expands to a string
29: * literal containing a conversion specifier, possibly modified by
30: * a prefix such as hh, h, l, or ll, suitable for use within the
31: * format argument of a formatted input/output function when
32: * converting the corresponding integer type. These macro names
33: * have the general form of PRI (character string literals for the
34: * fprintf family) or SCN (character string literals for the fscanf
35: * family), followed by the conversion specifier, followed by a
36: * name corresponding to a similar typedef name. For example,
37: * PRIdFAST32 can be used in a format string to print the value of
38: * an integer of type int_fast32_t.
39: */
40:
41: /* fprintf macros for signed integers */
1.9 ! millert 42: #define PRId8 "d" /* int8_t */
! 43: #define PRId16 "d" /* int16_t */
! 44: #define PRId32 "d" /* int32_t */
! 45: #define PRId64 "lld" /* int64_t */
! 46:
! 47: #define PRIdLEAST8 "d" /* int_least8_t */
! 48: #define PRIdLEAST16 "d" /* int_least16_t */
! 49: #define PRIdLEAST32 "d" /* int_least32_t */
! 50: #define PRIdLEAST64 "lld" /* int_least64_t */
! 51:
! 52: #define PRIdFAST8 "d" /* int_fast8_t */
! 53: #define PRIdFAST16 "d" /* int_fast16_t */
! 54: #define PRIdFAST32 "d" /* int_fast32_t */
! 55: #define PRIdFAST64 "lld" /* int_fast64_t */
! 56:
! 57: #define PRIdMAX "jd" /* intmax_t */
! 58: #define PRIdPTR "ld" /* intptr_t */
! 59:
! 60: #define PRIi8 "i" /* int8_t */
! 61: #define PRIi16 "i" /* int16_t */
! 62: #define PRIi32 "i" /* int32_t */
! 63: #define PRIi64 "lli" /* int64_t */
! 64:
! 65: #define PRIiLEAST8 "i" /* int_least8_t */
! 66: #define PRIiLEAST16 "i" /* int_least16_t */
! 67: #define PRIiLEAST32 "i" /* int_least32_t */
! 68: #define PRIiLEAST64 "lli" /* int_least64_t */
! 69:
! 70: #define PRIiFAST8 "i" /* int_fast8_t */
! 71: #define PRIiFAST16 "i" /* int_fast16_t */
! 72: #define PRIiFAST32 "i" /* int_fast32_t */
! 73: #define PRIiFAST64 "lli" /* int_fast64_t */
1.6 millert 74:
1.9 ! millert 75: #define PRIiMAX "ji" /* intmax_t */
! 76: #define PRIiPTR "li" /* intptr_t */
1.6 millert 77:
78: /* fprintf macros for unsigned integers */
1.9 ! millert 79: #define PRIo8 "o" /* int8_t */
! 80: #define PRIo16 "o" /* int16_t */
! 81: #define PRIo32 "o" /* int32_t */
! 82: #define PRIo64 "llo" /* int64_t */
! 83:
! 84: #define PRIoLEAST8 "o" /* int_least8_t */
! 85: #define PRIoLEAST16 "o" /* int_least16_t */
! 86: #define PRIoLEAST32 "o" /* int_least32_t */
! 87: #define PRIoLEAST64 "llo" /* int_least64_t */
! 88:
! 89: #define PRIoFAST8 "o" /* int_fast8_t */
! 90: #define PRIoFAST16 "o" /* int_fast16_t */
! 91: #define PRIoFAST32 "o" /* int_fast32_t */
! 92: #define PRIoFAST64 "llo" /* int_fast64_t */
! 93:
! 94: #define PRIoMAX "jo" /* intmax_t */
! 95: #define PRIoPTR "lo" /* intptr_t */
! 96:
! 97: #define PRIu8 "u" /* uint8_t */
! 98: #define PRIu16 "u" /* uint16_t */
! 99: #define PRIu32 "u" /* uint32_t */
! 100: #define PRIu64 "llu" /* uint64_t */
! 101:
! 102: #define PRIuLEAST8 "u" /* uint_least8_t */
! 103: #define PRIuLEAST16 "u" /* uint_least16_t */
! 104: #define PRIuLEAST32 "u" /* uint_least32_t */
! 105: #define PRIuLEAST64 "llu" /* uint_least64_t */
! 106:
! 107: #define PRIuFAST8 "u" /* uint_fast8_t */
! 108: #define PRIuFAST16 "u" /* uint_fast16_t */
! 109: #define PRIuFAST32 "u" /* uint_fast32_t */
! 110: #define PRIuFAST64 "llu" /* uint_fast64_t */
! 111:
! 112: #define PRIuMAX "ju" /* uintmax_t */
! 113: #define PRIuPTR "lu" /* uintptr_t */
! 114:
! 115: #define PRIx8 "x" /* uint8_t */
! 116: #define PRIx16 "x" /* uint16_t */
! 117: #define PRIx32 "x" /* uint32_t */
! 118: #define PRIx64 "llx" /* uint64_t */
! 119:
! 120: #define PRIxLEAST8 "x" /* uint_least8_t */
! 121: #define PRIxLEAST16 "x" /* uint_least16_t */
! 122: #define PRIxLEAST32 "x" /* uint_least32_t */
! 123: #define PRIxLEAST64 "llx" /* uint_least64_t */
! 124:
! 125: #define PRIxFAST8 "x" /* uint_fast8_t */
! 126: #define PRIxFAST16 "x" /* uint_fast16_t */
! 127: #define PRIxFAST32 "x" /* uint_fast32_t */
! 128: #define PRIxFAST64 "llx" /* uint_fast64_t */
! 129:
! 130: #define PRIxMAX "jx" /* uintmax_t */
! 131: #define PRIxPTR "lx" /* uintptr_t */
! 132:
! 133: #define PRIX8 "X" /* uint8_t */
! 134: #define PRIX16 "X" /* uint16_t */
! 135: #define PRIX32 "X" /* uint32_t */
! 136: #define PRIX64 "llX" /* uint64_t */
! 137:
! 138: #define PRIXLEAST8 "X" /* uint_least8_t */
! 139: #define PRIXLEAST16 "X" /* uint_least16_t */
! 140: #define PRIXLEAST32 "X" /* uint_least32_t */
! 141: #define PRIXLEAST64 "llX" /* uint_least64_t */
! 142:
! 143: #define PRIXFAST8 "X" /* uint_fast8_t */
! 144: #define PRIXFAST16 "X" /* uint_fast16_t */
! 145: #define PRIXFAST32 "X" /* uint_fast32_t */
! 146: #define PRIXFAST64 "llX" /* uint_fast64_t */
1.6 millert 147:
1.9 ! millert 148: #define PRIXMAX "jX" /* uintmax_t */
! 149: #define PRIXPTR "lX" /* uintptr_t */
1.6 millert 150:
151: /* fscanf macros for signed integers */
1.9 ! millert 152: #define SCNd8 "hhd" /* int8_t */
! 153: #define SCNd16 "hd" /* int16_t */
! 154: #define SCNd32 "d" /* int32_t */
! 155: #define SCNd64 "lld" /* int64_t */
! 156:
! 157: #define SCNdLEAST8 "hhd" /* int_least8_t */
! 158: #define SCNdLEAST16 "hd" /* int_least16_t */
! 159: #define SCNdLEAST32 "d" /* int_least32_t */
! 160: #define SCNdLEAST64 "lld" /* int_least64_t */
! 161:
! 162: #define SCNdFAST8 "hhd" /* int_fast8_t */
! 163: #define SCNdFAST16 "hd" /* int_fast16_t */
! 164: #define SCNdFAST32 "d" /* int_fast32_t */
! 165: #define SCNdFAST64 "lld" /* int_fast64_t */
! 166:
! 167: #define SCNdMAX "jd" /* intmax_t */
! 168: #define SCNdPTR "ld" /* intptr_t */
! 169:
! 170: #define SCNi8 "hhi" /* int8_t */
! 171: #define SCNi16 "hi" /* int16_t */
! 172: #define SCNi32 "i" /* int32_t */
! 173: #define SCNi64 "lli" /* int64_t */
! 174:
! 175: #define SCNiLEAST8 "hhi" /* int_least8_t */
! 176: #define SCNiLEAST16 "hi" /* int_least16_t */
! 177: #define SCNiLEAST32 "i" /* int_least32_t */
! 178: #define SCNiLEAST64 "lli" /* int_least64_t */
! 179:
! 180: #define SCNiFAST8 "hhi" /* int_fast8_t */
! 181: #define SCNiFAST16 "hi" /* int_fast16_t */
! 182: #define SCNiFAST32 "i" /* int_fast32_t */
! 183: #define SCNiFAST64 "lli" /* int_fast64_t */
1.6 millert 184:
1.9 ! millert 185: #define SCNiMAX "ji" /* intmax_t */
! 186: #define SCNiPTR "li" /* intptr_t */
1.6 millert 187:
188: /* fscanf macros for unsigned integers */
1.9 ! millert 189: #define SCNo8 "hho" /* uint8_t */
! 190: #define SCNo16 "ho" /* uint16_t */
! 191: #define SCNo32 "o" /* uint32_t */
! 192: #define SCNo64 "llo" /* uint64_t */
! 193:
! 194: #define SCNoLEAST8 "hho" /* uint_least8_t */
! 195: #define SCNoLEAST16 "ho" /* uint_least16_t */
! 196: #define SCNoLEAST32 "o" /* uint_least32_t */
! 197: #define SCNoLEAST64 "llo" /* uint_least64_t */
! 198:
! 199: #define SCNoFAST8 "hho" /* uint_fast8_t */
! 200: #define SCNoFAST16 "ho" /* uint_fast16_t */
! 201: #define SCNoFAST32 "o" /* uint_fast32_t */
! 202: #define SCNoFAST64 "llo" /* uint_fast64_t */
! 203:
! 204: #define SCNoMAX "jo" /* uintmax_t */
! 205: #define SCNoPTR "lo" /* uintptr_t */
! 206:
! 207: #define SCNu8 "hhu" /* uint8_t */
! 208: #define SCNu16 "hu" /* uint16_t */
! 209: #define SCNu32 "u" /* uint32_t */
! 210: #define SCNu64 "llu" /* uint64_t */
! 211:
! 212: #define SCNuLEAST8 "hhu" /* uint_least8_t */
! 213: #define SCNuLEAST16 "hu" /* uint_least16_t */
! 214: #define SCNuLEAST32 "u" /* uint_least32_t */
! 215: #define SCNuLEAST64 "llu" /* uint_least64_t */
! 216:
! 217: #define SCNuFAST8 "hhu" /* uint_fast8_t */
! 218: #define SCNuFAST16 "hu" /* uint_fast16_t */
! 219: #define SCNuFAST32 "u" /* uint_fast32_t */
! 220: #define SCNuFAST64 "llu" /* uint_fast64_t */
! 221:
! 222: #define SCNuMAX "ju" /* uintmax_t */
! 223: #define SCNuPTR "lu" /* uintptr_t */
! 224:
! 225: #define SCNx8 "hhx" /* uint8_t */
! 226: #define SCNx16 "hx" /* uint16_t */
! 227: #define SCNx32 "x" /* uint32_t */
! 228: #define SCNx64 "llx" /* uint64_t */
! 229:
! 230: #define SCNxLEAST8 "hhx" /* uint_least8_t */
! 231: #define SCNxLEAST16 "hx" /* uint_least16_t */
! 232: #define SCNxLEAST32 "x" /* uint_least32_t */
! 233: #define SCNxLEAST64 "llx" /* uint_least64_t */
! 234:
! 235: #define SCNxFAST8 "hhx" /* uint_fast8_t */
! 236: #define SCNxFAST16 "hx" /* uint_fast16_t */
! 237: #define SCNxFAST32 "x" /* uint_fast32_t */
! 238: #define SCNxFAST64 "llx" /* uint_fast64_t */
1.6 millert 239:
1.9 ! millert 240: #define SCNxMAX "jx" /* uintmax_t */
! 241: #define SCNxPTR "lx" /* uintptr_t */
1.6 millert 242:
243: #endif /* __cplusplus || __STDC_FORMAT_MACROS */
244:
1.7 millert 245: typedef struct {
246: intmax_t quot; /* quotient */
247: intmax_t rem; /* remainder */
248: } imaxdiv_t;
249:
250: __BEGIN_DECLS
251: intmax_t imaxabs(intmax_t);
252: imaxdiv_t imaxdiv(intmax_t, intmax_t);
253: intmax_t strtoimax(const char *, char **, int);
254: uintmax_t strtoumax(const char *, char **, int);
255: __END_DECLS
1.1 millert 256:
257: #endif /* _INTTYPES_H_ */