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