1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2014 Garrett D'Amore <garrett@damore.org> 24 * 25 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 #ifndef _SYS_INT_FMTIO_H 30 #define _SYS_INT_FMTIO_H 31 32 /* 33 * This file, <sys/int_fmtio.h>, is part of the Sun Microsystems implementation 34 * of <inttypes.h> as defined by the ISO C Standard, ISO/IEC 9899:1999 35 * Programming language - C. 36 * 37 * ISO International Organization for Standardization. 38 * 39 * Programs/Modules should not directly include this file. Access to the 40 * types defined in this file should be through the inclusion of one of the 41 * following files: 42 * 43 * <sys/inttypes.h> Provides the Kernel and Driver appropriate 44 * components of <inttypes.h>. 45 * 46 * <inttypes.h> For use by applications. 47 * 48 * See these files for more details. 49 */ 50 51 #include <sys/feature_tests.h> 52 53 #ifdef __cplusplus 54 extern "C" { 55 #endif 56 57 /* 58 * Formatted I/O 59 * 60 * The following macros can be used even when an implementation has not 61 * extended the printf/scanf family of functions. 62 * 63 * The form of the names of the macros is either "PRI" for printf specifiers 64 * or "SCN" for scanf specifiers, followed by the conversion specifier letter 65 * followed by the datatype size. For example, PRId32 is the macro for 66 * the printf d conversion specifier with the flags for 32 bit datatype. 67 * 68 * An example using one of these macros: 69 * 70 * uint64_t u; 71 * printf("u = %016" PRIx64 "\n", u); 72 * 73 * For the purpose of example, the definitions of the printf/scanf macros 74 * below have the values appropriate for a machine with 8 bit shorts, 16 75 * bit shorts, 32 bit ints, 32 or 64 bit longs depending on compilation 76 * mode, and 64 bit long longs. 77 */ 78 79 /* 80 * fprintf macros for signed integers 81 */ 82 #if defined(_KERNEL) 83 #define _MODF8 "" 84 #define _MODF16 "" 85 #else 86 #define _MODF8 "hh" 87 #define _MODF16 "h" 88 #endif 89 90 #define _PRId "d" 91 #define _PRIi "i" 92 #define _PRIo "o" 93 #define _PRIu "u" 94 #define _PRIx "x" 95 #define _PRIX "X" 96 97 #define PRId8 _MODF8 _PRId 98 #define PRIdLEAST8 PRId8 99 #define PRIdFAST8 PRId8 100 #define PRId16 _MODF16 _PRId 101 #define PRIdLEAST16 PRId16 102 #define PRId32 "d" 103 #define PRIdFAST16 PRId32 104 #define PRIdLEAST32 PRId32 105 #define PRIdFAST32 PRId32 106 #ifdef _LP64 107 #define PRId64 "ld" 108 #else /* _ILP32 */ 109 #if defined(_LONGLONG_TYPE) 110 #define PRId64 "lld" 111 #endif 112 #endif 113 #ifdef PRId64 114 #define PRIdLEAST64 PRId64 115 #define PRIdFAST64 PRId64 116 #endif 117 118 #define PRIi8 _MODF8 _PRIi 119 #define PRIiLEAST8 PRIi8 120 #define PRIiFAST8 PRIi8 121 #define PRIi16 _MODF16 _PRIi 122 #define PRIiLEAST16 PRIi16 123 #define PRIi32 "i" 124 #define PRIiFAST16 PRIi32 125 #define PRIiLEAST32 PRIi32 126 #define PRIiFAST32 PRIi32 127 #ifdef _LP64 128 #define PRIi64 "li" 129 #else /* _ILP32 */ 130 #if defined(_LONGLONG_TYPE) 131 #define PRIi64 "lli" 132 #endif 133 #endif 134 #ifdef PRIi64 135 #define PRIiLEAST64 PRIi64 136 #define PRIiFAST64 PRIi64 137 #endif 138 139 /* 140 * fprintf macros for unsigned integers 141 */ 142 143 #define PRIo8 _MODF8 _PRIo 144 #define PRIoLEAST8 PRIo8 145 #define PRIoFAST8 PRIo8 146 #define PRIo16 _MODF16 _PRIo 147 #define PRIoLEAST16 PRIo16 148 #define PRIo32 "o" 149 #define PRIoFAST16 PRIo32 150 #define PRIoLEAST32 PRIo32 151 #define PRIoFAST32 PRIo32 152 #ifdef _LP64 153 #define PRIo64 "lo" 154 #else /* _ILP32 */ 155 #if defined(_LONGLONG_TYPE) 156 #define PRIo64 "llo" 157 #endif 158 #endif 159 #ifdef PRIo64 160 #define PRIoLEAST64 PRIo64 161 #define PRIoFAST64 PRIo64 162 #endif 163 164 #define PRIu8 _MODF8 _PRIu 165 #define PRIuLEAST8 PRIu8 166 #define PRIuFAST8 PRIu8 167 #define PRIu16 _MODF16 _PRIu 168 #define PRIuLEAST16 PRIu16 169 #define PRIu32 "u" 170 #define PRIuFAST16 PRIu32 171 #define PRIuLEAST32 PRIu32 172 #define PRIuFAST32 PRIu32 173 #ifdef _LP64 174 #define PRIu64 "lu" 175 #else /* _ILP32 */ 176 #if defined(_LONGLONG_TYPE) 177 #define PRIu64 "llu" 178 #endif 179 #endif 180 #ifdef PRIu64 181 #define PRIuLEAST64 PRIu64 182 #define PRIuFAST64 PRIu64 183 #endif 184 185 #define PRIx8 _MODF8 _PRIx 186 #define PRIxLEAST8 PRIx8 187 #define PRIxFAST8 PRIx8 188 #define PRIx16 _MODF16 _PRIx 189 #define PRIxLEAST16 PRIx16 190 #define PRIx32 "x" 191 #define PRIxFAST16 PRIx32 192 #define PRIxLEAST32 PRIx32 193 #define PRIxFAST32 PRIx32 194 #ifdef _LP64 195 #define PRIx64 "lx" 196 #else /* _ILP32 */ 197 #if defined(_LONGLONG_TYPE) 198 #define PRIx64 "llx" 199 #endif 200 #endif 201 #ifdef PRIx64 202 #define PRIxLEAST64 PRIx64 203 #define PRIxFAST64 PRIx64 204 #endif 205 206 #define PRIX8 _MODF8 _PRIX 207 #define PRIXLEAST8 PRIX8 208 #define PRIXFAST8 PRIX8 209 #define PRIX16 _MODF16 _PRIX 210 #define PRIXLEAST16 PRIX16 211 #define PRIX32 "X" 212 #define PRIXFAST16 PRIX32 213 #define PRIXLEAST32 PRIX32 214 #define PRIXFAST32 PRIX32 215 #ifdef _LP64 216 #define PRIX64 "lX" 217 #else /* _ILP32 */ 218 #if defined(_LONGLONG_TYPE) 219 #define PRIX64 "llX" 220 #endif 221 #endif 222 #ifdef PRIX64 223 #define PRIXLEAST64 PRIX64 224 #define PRIXFAST64 PRIX64 225 #endif 226 227 /* 228 * fprintf macros for pointers 229 */ 230 231 #if defined(_LP64) || defined(_I32LPx) 232 #define PRIdPTR "ld" 233 #define PRIiPTR "li" 234 #define PRIoPTR "lo" 235 #define PRIuPTR "lu" 236 #define PRIxPTR "lx" 237 #define PRIXPTR "lX" 238 #else 239 #define PRIdPTR "d" 240 #define PRIiPTR "i" 241 #define PRIoPTR "o" 242 #define PRIuPTR "u" 243 #define PRIxPTR "x" 244 #define PRIXPTR "X" 245 #endif /* defined(_LP64) || defined(_I32LPx) */ 246 247 /* 248 * fscanf macros for signed integers 249 */ 250 #define SCNd8 "hhd" 251 #define SCNdLEAST8 SCNd8 252 #define SCNdFAST8 SCNd8 253 #define SCNd16 "hd" 254 #define SCNdLEAST16 SCNd16 255 #define SCNd32 "d" 256 #define SCNdFAST16 SCNd32 257 #define SCNdLEAST32 SCNd32 258 #define SCNdFAST32 SCNd32 259 #ifdef PRId64 260 #define SCNd64 PRId64 261 #define SCNdLEAST64 PRId64 262 #define SCNdFAST64 PRId64 263 #endif 264 #define SCNdPTR PRIdPTR 265 266 #define SCNi8 "hhi" 267 #define SCNiLEAST8 SCNi8 268 #define SCNiFAST8 SCNi8 269 #define SCNi16 "hi" 270 #define SCNiLEAST16 SCNi16 271 #define SCNi32 "i" 272 #define SCNiFAST16 SCNi32 273 #define SCNiLEAST32 SCNi32 274 #define SCNiFAST32 SCNi32 275 #ifdef PRIi64 276 #define SCNi64 PRIi64 277 #define SCNiLEAST64 PRIi64 278 #define SCNiFAST64 PRIi64 279 #endif 280 #define SCNiPTR PRIiPTR 281 282 /* 283 * fscanf macros for unsigned integers 284 */ 285 #define SCNo8 "hho" 286 #define SCNoLEAST8 SCNo8 287 #define SCNoFAST8 SCNo8 288 #define SCNo16 "ho" 289 #define SCNoLEAST16 SCNo16 290 #define SCNo32 "o" 291 #define SCNoFAST16 SCNo32 292 #define SCNoLEAST32 SCNo32 293 #define SCNoFAST32 SCNo32 294 #ifdef PRIo64 295 #define SCNo64 PRIo64 296 #define SCNoLEAST64 PRIo64 297 #define SCNoFAST64 PRIo64 298 #endif 299 #define SCNoPTR PRIoPTR 300 301 #define SCNu8 "hhu" 302 #define SCNuLEAST8 SCNu8 303 #define SCNuFAST8 SCNu8 304 #define SCNu16 "hu" 305 #define SCNuLEAST16 SCNu16 306 #define SCNu32 "u" 307 #define SCNuFAST16 SCNu32 308 #define SCNuLEAST32 SCNu32 309 #define SCNuFAST32 SCNu32 310 #ifdef PRIu64 311 #define SCNu64 PRIu64 312 #define SCNuLEAST64 PRIu64 313 #define SCNuFAST64 PRIu64 314 #endif 315 #define SCNuPTR PRIuPTR 316 317 #define SCNx8 "hhx" 318 #define SCNxLEAST8 SCNx8 319 #define SCNxFAST8 SCNx8 320 #define SCNx16 "hx" 321 #define SCNxLEAST16 SCNx16 322 #define SCNx32 "x" 323 #define SCNxFAST16 SCNx32 324 #define SCNxLEAST32 SCNx32 325 #define SCNxFAST32 SCNx32 326 #ifdef PRIx64 327 #define SCNx64 PRIx64 328 #define SCNxLEAST64 PRIx64 329 #define SCNxFAST64 PRIx64 330 #endif 331 #define SCNxPTR PRIxPTR 332 333 #define SCNX8 "hhX" 334 #define SCNXLEAST8 SCNX8 335 #define SCNXFAST8 SCNX8 336 #define SCNX16 "hX" 337 #define SCNXLEAST16 SCNX16 338 #define SCNX32 "X" 339 #define SCNXFAST16 SCNX32 340 #define SCNXLEAST32 SCNX32 341 #define SCNXFAST32 SCNX32 342 #ifdef PRIX64 343 #define SCNX64 PRIX64 344 #define SCNXLEAST64 PRIX64 345 #define SCNXFAST64 PRIX64 346 #endif 347 #define SCNXPTR PRIXPTR 348 349 /* 350 * The following macros define I/O formats for intmax_t and uintmax_t. 351 */ 352 #if !defined(_LP64) && defined(_LONGLONG_TYPE) 353 #define PRIdMAX "lld" 354 #define PRIiMAX "lli" 355 #define PRIoMAX "llo" 356 #define PRIxMAX "llx" 357 #define PRIuMAX "llu" 358 #define PRIXMAX "llX" 359 #else 360 #define PRIdMAX "ld" 361 #define PRIiMAX "li" 362 #define PRIoMAX "lo" 363 #define PRIxMAX "lx" 364 #define PRIuMAX "lu" 365 #define PRIXMAX "lX" 366 #endif /* !defined(_LP64) && defined(_LONGLONG_TYPE) */ 367 368 #define SCNdMAX PRIdMAX 369 #define SCNiMAX PRIiMAX 370 #define SCNoMAX PRIoMAX 371 #define SCNxMAX PRIxMAX 372 #define SCNuMAX PRIuMAX 373 #define SCNXMAX PRIXMAX 374 375 #ifdef __cplusplus 376 } 377 #endif 378 379 #endif /* _SYS_INT_FMTIO_H */