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