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 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _SYS_INT_FMTIO_H 28 #define _SYS_INT_FMTIO_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 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 #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) 98 #define PRId8 _MODF8 _PRId 99 #define PRIdLEAST8 PRId8 100 #define PRIdFAST8 PRId8 101 #endif 102 #define PRId16 _MODF16 _PRId 103 #define PRIdLEAST16 PRId16 104 #define PRId32 "d" 105 #define PRIdFAST16 PRId32 106 #define PRIdLEAST32 PRId32 107 #define PRIdFAST32 PRId32 108 #ifdef _LP64 109 #define PRId64 "ld" 110 #else /* _ILP32 */ 111 #if defined(_LONGLONG_TYPE) 112 #define PRId64 "lld" 113 #endif 114 #endif 115 #ifdef PRId64 116 #define PRIdLEAST64 PRId64 117 #define PRIdFAST64 PRId64 118 #endif 119 120 #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) 121 #define PRIi8 _MODF8 _PRIi 122 #define PRIiLEAST8 PRIi8 123 #define PRIiFAST8 PRIi8 124 #endif 125 #define PRIi16 _MODF16 _PRIi 126 #define PRIiLEAST16 PRIi16 127 #define PRIi32 "i" 128 #define PRIiFAST16 PRIi32 129 #define PRIiLEAST32 PRIi32 130 #define PRIiFAST32 PRIi32 131 #ifdef _LP64 132 #define PRIi64 "li" 133 #else /* _ILP32 */ 134 #if defined(_LONGLONG_TYPE) 135 #define PRIi64 "lli" 136 #endif 137 #endif 138 #ifdef PRIi64 139 #define PRIiLEAST64 PRIi64 140 #define PRIiFAST64 PRIi64 141 #endif 142 143 /* 144 * fprintf macros for unsigned integers 145 */ 146 147 #define PRIo8 _MODF8 _PRIo 148 #define PRIoLEAST8 PRIo8 149 #define PRIoFAST8 PRIo8 150 #define PRIo16 _MODF16 _PRIo 151 #define PRIoLEAST16 PRIo16 152 #define PRIo32 "o" 153 #define PRIoFAST16 PRIo32 154 #define PRIoLEAST32 PRIo32 155 #define PRIoFAST32 PRIo32 156 #ifdef _LP64 157 #define PRIo64 "lo" 158 #else /* _ILP32 */ 159 #if defined(_LONGLONG_TYPE) 160 #define PRIo64 "llo" 161 #endif 162 #endif 163 #ifdef PRIo64 164 #define PRIoLEAST64 PRIo64 165 #define PRIoFAST64 PRIo64 166 #endif 167 168 #define PRIu8 _MODF8 _PRIu 169 #define PRIuLEAST8 PRIu8 170 #define PRIuFAST8 PRIu8 171 #define PRIu16 _MODF16 _PRIu 172 #define PRIuLEAST16 PRIu16 173 #define PRIu32 "u" 174 #define PRIuFAST16 PRIu32 175 #define PRIuLEAST32 PRIu32 176 #define PRIuFAST32 PRIu32 177 #ifdef _LP64 178 #define PRIu64 "lu" 179 #else /* _ILP32 */ 180 #if defined(_LONGLONG_TYPE) 181 #define PRIu64 "llu" 182 #endif 183 #endif 184 #ifdef PRIu64 185 #define PRIuLEAST64 PRIu64 186 #define PRIuFAST64 PRIu64 187 #endif 188 189 #define PRIx8 _MODF8 _PRIx 190 #define PRIxLEAST8 PRIx8 191 #define PRIxFAST8 PRIx8 192 #define PRIx16 _MODF16 _PRIx 193 #define PRIxLEAST16 PRIx16 194 #define PRIx32 "x" 195 #define PRIxFAST16 PRIx32 196 #define PRIxLEAST32 PRIx32 197 #define PRIxFAST32 PRIx32 198 #ifdef _LP64 199 #define PRIx64 "lx" 200 #else /* _ILP32 */ 201 #if defined(_LONGLONG_TYPE) 202 #define PRIx64 "llx" 203 #endif 204 #endif 205 #ifdef PRIx64 206 #define PRIxLEAST64 PRIx64 207 #define PRIxFAST64 PRIx64 208 #endif 209 210 #define PRIX8 _MODF8 _PRIX 211 #define PRIXLEAST8 PRIX8 212 #define PRIXFAST8 PRIX8 213 #define PRIX16 _MODF16 _PRIX 214 #define PRIXLEAST16 PRIX16 215 #define PRIX32 "X" 216 #define PRIXFAST16 PRIX32 217 #define PRIXLEAST32 PRIX32 218 #define PRIXFAST32 PRIX32 219 #ifdef _LP64 220 #define PRIX64 "lX" 221 #else /* _ILP32 */ 222 #if defined(_LONGLONG_TYPE) 223 #define PRIX64 "llX" 224 #endif 225 #endif 226 #ifdef PRIX64 227 #define PRIXLEAST64 PRIX64 228 #define PRIXFAST64 PRIX64 229 #endif 230 231 /* 232 * fprintf macros for pointers 233 */ 234 235 #if defined(_LP64) || defined(_I32LPx) 236 #define PRIdPTR "ld" 237 #define PRIiPTR "li" 238 #define PRIoPTR "lo" 239 #define PRIuPTR "lu" 240 #define PRIxPTR "lx" 241 #define PRIXPTR "lX" 242 #else 243 #define PRIdPTR "d" 244 #define PRIiPTR "i" 245 #define PRIoPTR "o" 246 #define PRIuPTR "u" 247 #define PRIxPTR "x" 248 #define PRIXPTR "X" 249 #endif /* defined(_LP64) || defined(_I32LPx) */ 250 251 /* 252 * fscanf macros for signed integers 253 */ 254 #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) 255 #define SCNd8 "hhd" 256 #define SCNdLEAST8 SCNd8 257 #define SCNdFAST8 SCNd8 258 #endif 259 #define SCNd16 "hd" 260 #define SCNdLEAST16 SCNd16 261 #define SCNd32 "d" 262 #define SCNdFAST16 SCNd32 263 #define SCNdLEAST32 SCNd32 264 #define SCNdFAST32 SCNd32 265 #ifdef PRId64 266 #define SCNd64 PRId64 267 #define SCNdLEAST64 PRId64 268 #define SCNdFAST64 PRId64 269 #endif 270 #define SCNdPTR PRIdPTR 271 272 #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) 273 #define SCNi8 "hhi" 274 #define SCNiLEAST8 SCNi8 275 #define SCNiFAST8 SCNi8 276 #endif 277 #define SCNi16 "hi" 278 #define SCNiLEAST16 SCNi16 279 #define SCNi32 "i" 280 #define SCNiFAST16 SCNi32 281 #define SCNiLEAST32 SCNi32 282 #define SCNiFAST32 SCNi32 283 #ifdef PRIi64 284 #define SCNi64 PRIi64 285 #define SCNiLEAST64 PRIi64 286 #define SCNiFAST64 PRIi64 287 #endif 288 #define SCNiPTR PRIiPTR 289 290 /* 291 * fscanf macros for unsigned integers 292 */ 293 #define SCNo8 "hho" 294 #define SCNoLEAST8 SCNo8 295 #define SCNoFAST8 SCNo8 296 #define SCNo16 "ho" 297 #define SCNoLEAST16 SCNo16 298 #define SCNo32 "o" 299 #define SCNoFAST16 SCNo32 300 #define SCNoLEAST32 SCNo32 301 #define SCNoFAST32 SCNo32 302 #ifdef PRIo64 303 #define SCNo64 PRIo64 304 #define SCNoLEAST64 PRIo64 305 #define SCNoFAST64 PRIo64 306 #endif 307 #define SCNoPTR PRIoPTR 308 309 #define SCNu8 "hhu" 310 #define SCNuLEAST8 SCNu8 311 #define SCNuFAST8 SCNu8 312 #define SCNu16 "hu" 313 #define SCNuLEAST16 SCNu16 314 #define SCNu32 "u" 315 #define SCNuFAST16 SCNu32 316 #define SCNuLEAST32 SCNu32 317 #define SCNuFAST32 SCNu32 318 #ifdef PRIu64 319 #define SCNu64 PRIu64 320 #define SCNuLEAST64 PRIu64 321 #define SCNuFAST64 PRIu64 322 #endif 323 #define SCNuPTR PRIuPTR 324 325 #define SCNx8 "hhx" 326 #define SCNxLEAST8 SCNx8 327 #define SCNxFAST8 SCNx8 328 #define SCNx16 "hx" 329 #define SCNxLEAST16 SCNx16 330 #define SCNx32 "x" 331 #define SCNxFAST16 SCNx32 332 #define SCNxLEAST32 SCNx32 333 #define SCNxFAST32 SCNx32 334 #ifdef PRIx64 335 #define SCNx64 PRIx64 336 #define SCNxLEAST64 PRIx64 337 #define SCNxFAST64 PRIx64 338 #endif 339 #define SCNxPTR PRIxPTR 340 341 #define SCNX8 "hhX" 342 #define SCNXLEAST8 SCNX8 343 #define SCNXFAST8 SCNX8 344 #define SCNX16 "hX" 345 #define SCNXLEAST16 SCNX16 346 #define SCNX32 "X" 347 #define SCNXFAST16 SCNX32 348 #define SCNXLEAST32 SCNX32 349 #define SCNXFAST32 SCNX32 350 #ifdef PRIX64 351 #define SCNX64 PRIX64 352 #define SCNXLEAST64 PRIX64 353 #define SCNXFAST64 PRIX64 354 #endif 355 #define SCNXPTR PRIXPTR 356 357 /* 358 * The following macros define I/O formats for intmax_t and uintmax_t. 359 */ 360 #if !defined(_LP64) && defined(_LONGLONG_TYPE) 361 #define PRIdMAX "lld" 362 #define PRIiMAX "lli" 363 #define PRIoMAX "llo" 364 #define PRIxMAX "llx" 365 #define PRIuMAX "llu" 366 #define PRIXMAX "llX" 367 #else 368 #define PRIdMAX "ld" 369 #define PRIiMAX "li" 370 #define PRIoMAX "lo" 371 #define PRIxMAX "lx" 372 #define PRIuMAX "lu" 373 #define PRIXMAX "lX" 374 #endif /* !defined(_LP64) && defined(_LONGLONG_TYPE) */ 375 376 #define SCNdMAX PRIdMAX 377 #define SCNiMAX PRIiMAX 378 #define SCNoMAX PRIoMAX 379 #define SCNxMAX PRIxMAX 380 #define SCNuMAX PRIuMAX 381 #define SCNXMAX PRIXMAX 382 383 #ifdef __cplusplus 384 } 385 #endif 386 387 #endif /* _SYS_INT_FMTIO_H */