1*4166ecb2SGabe Black /* 2*4166ecb2SGabe Black * Copyright (C) 1997-2001, 2004, 2007 Free Software Foundation, Inc. 3*4166ecb2SGabe Black * 4*4166ecb2SGabe Black * This file is taken from the GNU C Library v2.15, with the unimplemented 5*4166ecb2SGabe Black * functions removed and a few style fixes. 6*4166ecb2SGabe Black * 7*4166ecb2SGabe Black * SPDX-License-Identifier: GPL-2.0+ 8*4166ecb2SGabe Black */ 9*4166ecb2SGabe Black 10*4166ecb2SGabe Black /* 11*4166ecb2SGabe Black * ISO C99: 7.8 Format conversion of integer types <inttypes.h> 12*4166ecb2SGabe Black */ 13*4166ecb2SGabe Black 14*4166ecb2SGabe Black #ifndef _INTTYPES_H 15*4166ecb2SGabe Black #define _INTTYPES_H 1 16*4166ecb2SGabe Black 17*4166ecb2SGabe Black #include <linux/compiler.h> 18*4166ecb2SGabe Black 19*4166ecb2SGabe Black /* Get a definition for wchar_t. But we must not define wchar_t itself. */ 20*4166ecb2SGabe Black #ifndef ____gwchar_t_defined 21*4166ecb2SGabe Black # ifdef __cplusplus 22*4166ecb2SGabe Black # define __gwchar_t wchar_t 23*4166ecb2SGabe Black # elif defined __WCHAR_TYPE__ 24*4166ecb2SGabe Black typedef __WCHAR_TYPE__ __gwchar_t; 25*4166ecb2SGabe Black # else 26*4166ecb2SGabe Black # define __need_wchar_t 27*4166ecb2SGabe Black # include <stddef.h> 28*4166ecb2SGabe Black typedef wchar_t __gwchar_t; 29*4166ecb2SGabe Black # endif 30*4166ecb2SGabe Black # define ____gwchar_t_defined 1 31*4166ecb2SGabe Black #endif 32*4166ecb2SGabe Black 33*4166ecb2SGabe Black 34*4166ecb2SGabe Black /* The ISO C99 standard specifies that these macros must only be 35*4166ecb2SGabe Black defined if explicitly requested. */ 36*4166ecb2SGabe Black #if !defined __cplusplus || defined __STDC_FORMAT_MACROS 37*4166ecb2SGabe Black 38*4166ecb2SGabe Black #ifdef CONFIG_USE_STDINT 39*4166ecb2SGabe Black # if __WORDSIZE == 64 40*4166ecb2SGabe Black # define __PRI64_PREFIX "l" 41*4166ecb2SGabe Black # define __PRIPTR_PREFIX "l" 42*4166ecb2SGabe Black # else 43*4166ecb2SGabe Black # define __PRI64_PREFIX "ll" 44*4166ecb2SGabe Black # define __PRIPTR_PREFIX 45*4166ecb2SGabe Black # endif 46*4166ecb2SGabe Black #else 47*4166ecb2SGabe Black /* linux/types.h always uses long long for 64-bit and long for uintptr_t */ 48*4166ecb2SGabe Black # define __PRI64_PREFIX "ll" 49*4166ecb2SGabe Black # define __PRIPTR_PREFIX "l" 50*4166ecb2SGabe Black #endif 51*4166ecb2SGabe Black 52*4166ecb2SGabe Black /* Macros for printing format specifiers. */ 53*4166ecb2SGabe Black 54*4166ecb2SGabe Black /* Decimal notation. */ 55*4166ecb2SGabe Black # define PRId8 "d" 56*4166ecb2SGabe Black # define PRId16 "d" 57*4166ecb2SGabe Black # define PRId32 "d" 58*4166ecb2SGabe Black # define PRId64 __PRI64_PREFIX "d" 59*4166ecb2SGabe Black 60*4166ecb2SGabe Black # define PRIdLEAST8 "d" 61*4166ecb2SGabe Black # define PRIdLEAST16 "d" 62*4166ecb2SGabe Black # define PRIdLEAST32 "d" 63*4166ecb2SGabe Black # define PRIdLEAST64 __PRI64_PREFIX "d" 64*4166ecb2SGabe Black 65*4166ecb2SGabe Black # define PRIdFAST8 "d" 66*4166ecb2SGabe Black # define PRIdFAST16 __PRIPTR_PREFIX "d" 67*4166ecb2SGabe Black # define PRIdFAST32 __PRIPTR_PREFIX "d" 68*4166ecb2SGabe Black # define PRIdFAST64 __PRI64_PREFIX "d" 69*4166ecb2SGabe Black 70*4166ecb2SGabe Black 71*4166ecb2SGabe Black # define PRIi8 "i" 72*4166ecb2SGabe Black # define PRIi16 "i" 73*4166ecb2SGabe Black # define PRIi32 "i" 74*4166ecb2SGabe Black # define PRIi64 __PRI64_PREFIX "i" 75*4166ecb2SGabe Black 76*4166ecb2SGabe Black # define PRIiLEAST8 "i" 77*4166ecb2SGabe Black # define PRIiLEAST16 "i" 78*4166ecb2SGabe Black # define PRIiLEAST32 "i" 79*4166ecb2SGabe Black # define PRIiLEAST64 __PRI64_PREFIX "i" 80*4166ecb2SGabe Black 81*4166ecb2SGabe Black # define PRIiFAST8 "i" 82*4166ecb2SGabe Black # define PRIiFAST16 __PRIPTR_PREFIX "i" 83*4166ecb2SGabe Black # define PRIiFAST32 __PRIPTR_PREFIX "i" 84*4166ecb2SGabe Black # define PRIiFAST64 __PRI64_PREFIX "i" 85*4166ecb2SGabe Black 86*4166ecb2SGabe Black /* Octal notation. */ 87*4166ecb2SGabe Black # define PRIo8 "o" 88*4166ecb2SGabe Black # define PRIo16 "o" 89*4166ecb2SGabe Black # define PRIo32 "o" 90*4166ecb2SGabe Black # define PRIo64 __PRI64_PREFIX "o" 91*4166ecb2SGabe Black 92*4166ecb2SGabe Black # define PRIoLEAST8 "o" 93*4166ecb2SGabe Black # define PRIoLEAST16 "o" 94*4166ecb2SGabe Black # define PRIoLEAST32 "o" 95*4166ecb2SGabe Black # define PRIoLEAST64 __PRI64_PREFIX "o" 96*4166ecb2SGabe Black 97*4166ecb2SGabe Black # define PRIoFAST8 "o" 98*4166ecb2SGabe Black # define PRIoFAST16 __PRIPTR_PREFIX "o" 99*4166ecb2SGabe Black # define PRIoFAST32 __PRIPTR_PREFIX "o" 100*4166ecb2SGabe Black # define PRIoFAST64 __PRI64_PREFIX "o" 101*4166ecb2SGabe Black 102*4166ecb2SGabe Black /* Unsigned integers. */ 103*4166ecb2SGabe Black # define PRIu8 "u" 104*4166ecb2SGabe Black # define PRIu16 "u" 105*4166ecb2SGabe Black # define PRIu32 "u" 106*4166ecb2SGabe Black # define PRIu64 __PRI64_PREFIX "u" 107*4166ecb2SGabe Black 108*4166ecb2SGabe Black # define PRIuLEAST8 "u" 109*4166ecb2SGabe Black # define PRIuLEAST16 "u" 110*4166ecb2SGabe Black # define PRIuLEAST32 "u" 111*4166ecb2SGabe Black # define PRIuLEAST64 __PRI64_PREFIX "u" 112*4166ecb2SGabe Black 113*4166ecb2SGabe Black # define PRIuFAST8 "u" 114*4166ecb2SGabe Black # define PRIuFAST16 __PRIPTR_PREFIX "u" 115*4166ecb2SGabe Black # define PRIuFAST32 __PRIPTR_PREFIX "u" 116*4166ecb2SGabe Black # define PRIuFAST64 __PRI64_PREFIX "u" 117*4166ecb2SGabe Black 118*4166ecb2SGabe Black /* lowercase hexadecimal notation. */ 119*4166ecb2SGabe Black # define PRIx8 "x" 120*4166ecb2SGabe Black # define PRIx16 "x" 121*4166ecb2SGabe Black # define PRIx32 "x" 122*4166ecb2SGabe Black # define PRIx64 __PRI64_PREFIX "x" 123*4166ecb2SGabe Black 124*4166ecb2SGabe Black # define PRIxLEAST8 "x" 125*4166ecb2SGabe Black # define PRIxLEAST16 "x" 126*4166ecb2SGabe Black # define PRIxLEAST32 "x" 127*4166ecb2SGabe Black # define PRIxLEAST64 __PRI64_PREFIX "x" 128*4166ecb2SGabe Black 129*4166ecb2SGabe Black # define PRIxFAST8 "x" 130*4166ecb2SGabe Black # define PRIxFAST16 __PRIPTR_PREFIX "x" 131*4166ecb2SGabe Black # define PRIxFAST32 __PRIPTR_PREFIX "x" 132*4166ecb2SGabe Black # define PRIxFAST64 __PRI64_PREFIX "x" 133*4166ecb2SGabe Black 134*4166ecb2SGabe Black /* UPPERCASE hexadecimal notation. */ 135*4166ecb2SGabe Black # define PRIX8 "X" 136*4166ecb2SGabe Black # define PRIX16 "X" 137*4166ecb2SGabe Black # define PRIX32 "X" 138*4166ecb2SGabe Black # define PRIX64 __PRI64_PREFIX "X" 139*4166ecb2SGabe Black 140*4166ecb2SGabe Black # define PRIXLEAST8 "X" 141*4166ecb2SGabe Black # define PRIXLEAST16 "X" 142*4166ecb2SGabe Black # define PRIXLEAST32 "X" 143*4166ecb2SGabe Black # define PRIXLEAST64 __PRI64_PREFIX "X" 144*4166ecb2SGabe Black 145*4166ecb2SGabe Black # define PRIXFAST8 "X" 146*4166ecb2SGabe Black # define PRIXFAST16 __PRIPTR_PREFIX "X" 147*4166ecb2SGabe Black # define PRIXFAST32 __PRIPTR_PREFIX "X" 148*4166ecb2SGabe Black # define PRIXFAST64 __PRI64_PREFIX "X" 149*4166ecb2SGabe Black 150*4166ecb2SGabe Black 151*4166ecb2SGabe Black /* Macros for printing `intmax_t' and `uintmax_t'. */ 152*4166ecb2SGabe Black # define PRIdMAX __PRI64_PREFIX "d" 153*4166ecb2SGabe Black # define PRIiMAX __PRI64_PREFIX "i" 154*4166ecb2SGabe Black # define PRIoMAX __PRI64_PREFIX "o" 155*4166ecb2SGabe Black # define PRIuMAX __PRI64_PREFIX "u" 156*4166ecb2SGabe Black # define PRIxMAX __PRI64_PREFIX "x" 157*4166ecb2SGabe Black # define PRIXMAX __PRI64_PREFIX "X" 158*4166ecb2SGabe Black 159*4166ecb2SGabe Black 160*4166ecb2SGabe Black /* Macros for printing `intptr_t' and `uintptr_t'. */ 161*4166ecb2SGabe Black # define PRIdPTR __PRIPTR_PREFIX "d" 162*4166ecb2SGabe Black # define PRIiPTR __PRIPTR_PREFIX "i" 163*4166ecb2SGabe Black # define PRIoPTR __PRIPTR_PREFIX "o" 164*4166ecb2SGabe Black # define PRIuPTR __PRIPTR_PREFIX "u" 165*4166ecb2SGabe Black # define PRIxPTR __PRIPTR_PREFIX "x" 166*4166ecb2SGabe Black # define PRIXPTR __PRIPTR_PREFIX "X" 167*4166ecb2SGabe Black 168*4166ecb2SGabe Black 169*4166ecb2SGabe Black /* Macros for scanning format specifiers. */ 170*4166ecb2SGabe Black 171*4166ecb2SGabe Black /* Signed decimal notation. */ 172*4166ecb2SGabe Black # define SCNd8 "hhd" 173*4166ecb2SGabe Black # define SCNd16 "hd" 174*4166ecb2SGabe Black # define SCNd32 "d" 175*4166ecb2SGabe Black # define SCNd64 __PRI64_PREFIX "d" 176*4166ecb2SGabe Black 177*4166ecb2SGabe Black # define SCNdLEAST8 "hhd" 178*4166ecb2SGabe Black # define SCNdLEAST16 "hd" 179*4166ecb2SGabe Black # define SCNdLEAST32 "d" 180*4166ecb2SGabe Black # define SCNdLEAST64 __PRI64_PREFIX "d" 181*4166ecb2SGabe Black 182*4166ecb2SGabe Black # define SCNdFAST8 "hhd" 183*4166ecb2SGabe Black # define SCNdFAST16 __PRIPTR_PREFIX "d" 184*4166ecb2SGabe Black # define SCNdFAST32 __PRIPTR_PREFIX "d" 185*4166ecb2SGabe Black # define SCNdFAST64 __PRI64_PREFIX "d" 186*4166ecb2SGabe Black 187*4166ecb2SGabe Black /* Signed decimal notation. */ 188*4166ecb2SGabe Black # define SCNi8 "hhi" 189*4166ecb2SGabe Black # define SCNi16 "hi" 190*4166ecb2SGabe Black # define SCNi32 "i" 191*4166ecb2SGabe Black # define SCNi64 __PRI64_PREFIX "i" 192*4166ecb2SGabe Black 193*4166ecb2SGabe Black # define SCNiLEAST8 "hhi" 194*4166ecb2SGabe Black # define SCNiLEAST16 "hi" 195*4166ecb2SGabe Black # define SCNiLEAST32 "i" 196*4166ecb2SGabe Black # define SCNiLEAST64 __PRI64_PREFIX "i" 197*4166ecb2SGabe Black 198*4166ecb2SGabe Black # define SCNiFAST8 "hhi" 199*4166ecb2SGabe Black # define SCNiFAST16 __PRIPTR_PREFIX "i" 200*4166ecb2SGabe Black # define SCNiFAST32 __PRIPTR_PREFIX "i" 201*4166ecb2SGabe Black # define SCNiFAST64 __PRI64_PREFIX "i" 202*4166ecb2SGabe Black 203*4166ecb2SGabe Black /* Unsigned decimal notation. */ 204*4166ecb2SGabe Black # define SCNu8 "hhu" 205*4166ecb2SGabe Black # define SCNu16 "hu" 206*4166ecb2SGabe Black # define SCNu32 "u" 207*4166ecb2SGabe Black # define SCNu64 __PRI64_PREFIX "u" 208*4166ecb2SGabe Black 209*4166ecb2SGabe Black # define SCNuLEAST8 "hhu" 210*4166ecb2SGabe Black # define SCNuLEAST16 "hu" 211*4166ecb2SGabe Black # define SCNuLEAST32 "u" 212*4166ecb2SGabe Black # define SCNuLEAST64 __PRI64_PREFIX "u" 213*4166ecb2SGabe Black 214*4166ecb2SGabe Black # define SCNuFAST8 "hhu" 215*4166ecb2SGabe Black # define SCNuFAST16 __PRIPTR_PREFIX "u" 216*4166ecb2SGabe Black # define SCNuFAST32 __PRIPTR_PREFIX "u" 217*4166ecb2SGabe Black # define SCNuFAST64 __PRI64_PREFIX "u" 218*4166ecb2SGabe Black 219*4166ecb2SGabe Black /* Octal notation. */ 220*4166ecb2SGabe Black # define SCNo8 "hho" 221*4166ecb2SGabe Black # define SCNo16 "ho" 222*4166ecb2SGabe Black # define SCNo32 "o" 223*4166ecb2SGabe Black # define SCNo64 __PRI64_PREFIX "o" 224*4166ecb2SGabe Black 225*4166ecb2SGabe Black # define SCNoLEAST8 "hho" 226*4166ecb2SGabe Black # define SCNoLEAST16 "ho" 227*4166ecb2SGabe Black # define SCNoLEAST32 "o" 228*4166ecb2SGabe Black # define SCNoLEAST64 __PRI64_PREFIX "o" 229*4166ecb2SGabe Black 230*4166ecb2SGabe Black # define SCNoFAST8 "hho" 231*4166ecb2SGabe Black # define SCNoFAST16 __PRIPTR_PREFIX "o" 232*4166ecb2SGabe Black # define SCNoFAST32 __PRIPTR_PREFIX "o" 233*4166ecb2SGabe Black # define SCNoFAST64 __PRI64_PREFIX "o" 234*4166ecb2SGabe Black 235*4166ecb2SGabe Black /* Hexadecimal notation. */ 236*4166ecb2SGabe Black # define SCNx8 "hhx" 237*4166ecb2SGabe Black # define SCNx16 "hx" 238*4166ecb2SGabe Black # define SCNx32 "x" 239*4166ecb2SGabe Black # define SCNx64 __PRI64_PREFIX "x" 240*4166ecb2SGabe Black 241*4166ecb2SGabe Black # define SCNxLEAST8 "hhx" 242*4166ecb2SGabe Black # define SCNxLEAST16 "hx" 243*4166ecb2SGabe Black # define SCNxLEAST32 "x" 244*4166ecb2SGabe Black # define SCNxLEAST64 __PRI64_PREFIX "x" 245*4166ecb2SGabe Black 246*4166ecb2SGabe Black # define SCNxFAST8 "hhx" 247*4166ecb2SGabe Black # define SCNxFAST16 __PRIPTR_PREFIX "x" 248*4166ecb2SGabe Black # define SCNxFAST32 __PRIPTR_PREFIX "x" 249*4166ecb2SGabe Black # define SCNxFAST64 __PRI64_PREFIX "x" 250*4166ecb2SGabe Black 251*4166ecb2SGabe Black 252*4166ecb2SGabe Black /* Macros for scanning `intmax_t' and `uintmax_t'. */ 253*4166ecb2SGabe Black # define SCNdMAX __PRI64_PREFIX "d" 254*4166ecb2SGabe Black # define SCNiMAX __PRI64_PREFIX "i" 255*4166ecb2SGabe Black # define SCNoMAX __PRI64_PREFIX "o" 256*4166ecb2SGabe Black # define SCNuMAX __PRI64_PREFIX "u" 257*4166ecb2SGabe Black # define SCNxMAX __PRI64_PREFIX "x" 258*4166ecb2SGabe Black 259*4166ecb2SGabe Black /* Macros for scaning `intptr_t' and `uintptr_t'. */ 260*4166ecb2SGabe Black # define SCNdPTR __PRIPTR_PREFIX "d" 261*4166ecb2SGabe Black # define SCNiPTR __PRIPTR_PREFIX "i" 262*4166ecb2SGabe Black # define SCNoPTR __PRIPTR_PREFIX "o" 263*4166ecb2SGabe Black # define SCNuPTR __PRIPTR_PREFIX "u" 264*4166ecb2SGabe Black # define SCNxPTR __PRIPTR_PREFIX "x" 265*4166ecb2SGabe Black 266*4166ecb2SGabe Black #endif /* C++ && format macros */ 267*4166ecb2SGabe Black 268*4166ecb2SGabe Black 269*4166ecb2SGabe Black #if __WORDSIZE == 64 270*4166ecb2SGabe Black 271*4166ecb2SGabe Black /* We have to define the `uintmax_t' type using `ldiv_t'. */ 272*4166ecb2SGabe Black typedef struct { 273*4166ecb2SGabe Black long int quot; /* Quotient. */ 274*4166ecb2SGabe Black long int rem; /* Remainder. */ 275*4166ecb2SGabe Black } imaxdiv_t; 276*4166ecb2SGabe Black 277*4166ecb2SGabe Black #else 278*4166ecb2SGabe Black 279*4166ecb2SGabe Black /* We have to define the `uintmax_t' type using `lldiv_t'. */ 280*4166ecb2SGabe Black typedef struct { 281*4166ecb2SGabe Black long long int quot; /* Quotient. */ 282*4166ecb2SGabe Black long long int rem; /* Remainder. */ 283*4166ecb2SGabe Black } imaxdiv_t; 284*4166ecb2SGabe Black 285*4166ecb2SGabe Black #endif 286*4166ecb2SGabe Black 287*4166ecb2SGabe Black #endif /* inttypes.h */ 288