1*0e0c1874Slogin /* Copyright (C) 1997-2022 Free Software Foundation, Inc. 2*0e0c1874Slogin This file is part of the GNU C Library. 3*0e0c1874Slogin 4*0e0c1874Slogin The GNU C Library is free software; you can redistribute it and/or 5*0e0c1874Slogin modify it under the terms of the GNU Lesser General Public 6*0e0c1874Slogin License as published by the Free Software Foundation; either 7*0e0c1874Slogin version 2.1 of the License, or (at your option) any later version. 8*0e0c1874Slogin 9*0e0c1874Slogin The GNU C Library is distributed in the hope that it will be useful, 10*0e0c1874Slogin but WITHOUT ANY WARRANTY; without even the implied warranty of 11*0e0c1874Slogin MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12*0e0c1874Slogin Lesser General Public License for more details. 13*0e0c1874Slogin 14*0e0c1874Slogin You should have received a copy of the GNU Lesser General Public 15*0e0c1874Slogin License along with the GNU C Library; if not, see 16*0e0c1874Slogin <https://www.gnu.org/licenses/>. */ 17*0e0c1874Slogin 18*0e0c1874Slogin /* 19*0e0c1874Slogin * ISO C99: 7.18 Integer types <stdint.h> 20*0e0c1874Slogin */ 21*0e0c1874Slogin 22*0e0c1874Slogin #ifndef _STDINT_H 23*0e0c1874Slogin #define _STDINT_H 1 24*0e0c1874Slogin 25*0e0c1874Slogin 26*0e0c1874Slogin 27*0e0c1874Slogin # define __WORDSIZE 64 28*0e0c1874Slogin 29*0e0c1874Slogin /* Convenience types. */ 30*0e0c1874Slogin typedef unsigned char __u_char; 31*0e0c1874Slogin typedef unsigned short int __u_short; 32*0e0c1874Slogin typedef unsigned int __u_int; 33*0e0c1874Slogin typedef unsigned long int __u_long; 34*0e0c1874Slogin 35*0e0c1874Slogin /* Fixed-size types, underlying types depend on word size and compiler. */ 36*0e0c1874Slogin typedef signed char __int8_t; 37*0e0c1874Slogin typedef unsigned char __uint8_t; 38*0e0c1874Slogin typedef signed short int __int16_t; 39*0e0c1874Slogin typedef unsigned short int __uint16_t; 40*0e0c1874Slogin typedef signed int __int32_t; 41*0e0c1874Slogin typedef unsigned int __uint32_t; 42*0e0c1874Slogin #if __WORDSIZE == 64 43*0e0c1874Slogin typedef signed long int __int64_t; 44*0e0c1874Slogin typedef unsigned long int __uint64_t; 45*0e0c1874Slogin #else 46*0e0c1874Slogin __extension__ typedef signed long long int __int64_t; 47*0e0c1874Slogin __extension__ typedef unsigned long long int __uint64_t; 48*0e0c1874Slogin #endif 49*0e0c1874Slogin 50*0e0c1874Slogin /* Smallest types with at least a given width. */ 51*0e0c1874Slogin typedef __int8_t __int_least8_t; 52*0e0c1874Slogin typedef __uint8_t __uint_least8_t; 53*0e0c1874Slogin typedef __int16_t __int_least16_t; 54*0e0c1874Slogin typedef __uint16_t __uint_least16_t; 55*0e0c1874Slogin typedef __int32_t __int_least32_t; 56*0e0c1874Slogin typedef __uint32_t __uint_least32_t; 57*0e0c1874Slogin typedef __int64_t __int_least64_t; 58*0e0c1874Slogin typedef __uint64_t __uint_least64_t; 59*0e0c1874Slogin 60*0e0c1874Slogin typedef __uint8_t uint8_t; 61*0e0c1874Slogin typedef __uint16_t uint16_t; 62*0e0c1874Slogin typedef __uint32_t uint32_t; 63*0e0c1874Slogin typedef __uint64_t uint64_t; 64*0e0c1874Slogin 65*0e0c1874Slogin typedef __int8_t int8_t; 66*0e0c1874Slogin typedef __int16_t int16_t; 67*0e0c1874Slogin typedef __int32_t int32_t; 68*0e0c1874Slogin typedef __int64_t int64_t; 69*0e0c1874Slogin 70*0e0c1874Slogin /* Small types. */ 71*0e0c1874Slogin 72*0e0c1874Slogin /* Signed. */ 73*0e0c1874Slogin typedef __int_least8_t int_least8_t; 74*0e0c1874Slogin typedef __int_least16_t int_least16_t; 75*0e0c1874Slogin typedef __int_least32_t int_least32_t; 76*0e0c1874Slogin typedef __int_least64_t int_least64_t; 77*0e0c1874Slogin 78*0e0c1874Slogin /* Unsigned. */ 79*0e0c1874Slogin typedef __uint_least8_t uint_least8_t; 80*0e0c1874Slogin typedef __uint_least16_t uint_least16_t; 81*0e0c1874Slogin typedef __uint_least32_t uint_least32_t; 82*0e0c1874Slogin typedef __uint_least64_t uint_least64_t; 83*0e0c1874Slogin 84*0e0c1874Slogin 85*0e0c1874Slogin /* Fast types. */ 86*0e0c1874Slogin 87*0e0c1874Slogin /* Signed. */ 88*0e0c1874Slogin typedef signed char int_fast8_t; 89*0e0c1874Slogin #if __WORDSIZE == 64 90*0e0c1874Slogin typedef long int int_fast16_t; 91*0e0c1874Slogin typedef long int int_fast32_t; 92*0e0c1874Slogin typedef long int int_fast64_t; 93*0e0c1874Slogin #else 94*0e0c1874Slogin typedef int int_fast16_t; 95*0e0c1874Slogin typedef int int_fast32_t; 96*0e0c1874Slogin __extension__ 97*0e0c1874Slogin typedef long long int int_fast64_t; 98*0e0c1874Slogin #endif 99*0e0c1874Slogin 100*0e0c1874Slogin /* Unsigned. */ 101*0e0c1874Slogin typedef unsigned char uint_fast8_t; 102*0e0c1874Slogin #if __WORDSIZE == 64 103*0e0c1874Slogin typedef unsigned long int uint_fast16_t; 104*0e0c1874Slogin typedef unsigned long int uint_fast32_t; 105*0e0c1874Slogin typedef unsigned long int uint_fast64_t; 106*0e0c1874Slogin #else 107*0e0c1874Slogin typedef unsigned int uint_fast16_t; 108*0e0c1874Slogin typedef unsigned int uint_fast32_t; 109*0e0c1874Slogin __extension__ 110*0e0c1874Slogin typedef unsigned long long int uint_fast64_t; 111*0e0c1874Slogin #endif 112*0e0c1874Slogin 113*0e0c1874Slogin 114*0e0c1874Slogin /* Types for `void *' pointers. */ 115*0e0c1874Slogin #if __WORDSIZE == 64 116*0e0c1874Slogin # ifndef __intptr_t_defined 117*0e0c1874Slogin typedef long int intptr_t; 118*0e0c1874Slogin # define __intptr_t_defined 119*0e0c1874Slogin # endif 120*0e0c1874Slogin typedef unsigned long int uintptr_t; 121*0e0c1874Slogin #else 122*0e0c1874Slogin # ifndef __intptr_t_defined 123*0e0c1874Slogin typedef int intptr_t; 124*0e0c1874Slogin # define __intptr_t_defined 125*0e0c1874Slogin # endif 126*0e0c1874Slogin typedef unsigned int uintptr_t; 127*0e0c1874Slogin #endif 128*0e0c1874Slogin 129*0e0c1874Slogin /* Largest integral types. */ 130*0e0c1874Slogin #if __WORDSIZE == 64 131*0e0c1874Slogin typedef long int __intmax_t; 132*0e0c1874Slogin typedef unsigned long int __uintmax_t; 133*0e0c1874Slogin #else 134*0e0c1874Slogin __extension__ typedef long long int __intmax_t; 135*0e0c1874Slogin __extension__ typedef unsigned long long int __uintmax_t; 136*0e0c1874Slogin #endif 137*0e0c1874Slogin 138*0e0c1874Slogin 139*0e0c1874Slogin /* Largest integral types. */ 140*0e0c1874Slogin typedef __intmax_t intmax_t; 141*0e0c1874Slogin typedef __uintmax_t uintmax_t; 142*0e0c1874Slogin 143*0e0c1874Slogin 144*0e0c1874Slogin # if __WORDSIZE == 64 145*0e0c1874Slogin # define __INT64_C(c) c ## L 146*0e0c1874Slogin # define __UINT64_C(c) c ## UL 147*0e0c1874Slogin # else 148*0e0c1874Slogin # define __INT64_C(c) c ## LL 149*0e0c1874Slogin # define __UINT64_C(c) c ## ULL 150*0e0c1874Slogin # endif 151*0e0c1874Slogin 152*0e0c1874Slogin /* Limits of integral types. */ 153*0e0c1874Slogin 154*0e0c1874Slogin /* Minimum of signed integral types. */ 155*0e0c1874Slogin # define INT8_MIN (-128) 156*0e0c1874Slogin # define INT16_MIN (-32767-1) 157*0e0c1874Slogin # define INT32_MIN (-2147483647-1) 158*0e0c1874Slogin # define INT64_MIN (-__INT64_C(9223372036854775807)-1) 159*0e0c1874Slogin /* Maximum of signed integral types. */ 160*0e0c1874Slogin # define INT8_MAX (127) 161*0e0c1874Slogin # define INT16_MAX (32767) 162*0e0c1874Slogin # define INT32_MAX (2147483647) 163*0e0c1874Slogin # define INT64_MAX (__INT64_C(9223372036854775807)) 164*0e0c1874Slogin 165*0e0c1874Slogin /* Maximum of unsigned integral types. */ 166*0e0c1874Slogin # define UINT8_MAX (255) 167*0e0c1874Slogin # define UINT16_MAX (65535) 168*0e0c1874Slogin # define UINT32_MAX (4294967295U) 169*0e0c1874Slogin # define UINT64_MAX (__UINT64_C(18446744073709551615)) 170*0e0c1874Slogin 171*0e0c1874Slogin 172*0e0c1874Slogin /* Minimum of signed integral types having a minimum size. */ 173*0e0c1874Slogin # define INT_LEAST8_MIN (-128) 174*0e0c1874Slogin # define INT_LEAST16_MIN (-32767-1) 175*0e0c1874Slogin # define INT_LEAST32_MIN (-2147483647-1) 176*0e0c1874Slogin # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) 177*0e0c1874Slogin /* Maximum of signed integral types having a minimum size. */ 178*0e0c1874Slogin # define INT_LEAST8_MAX (127) 179*0e0c1874Slogin # define INT_LEAST16_MAX (32767) 180*0e0c1874Slogin # define INT_LEAST32_MAX (2147483647) 181*0e0c1874Slogin # define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) 182*0e0c1874Slogin 183*0e0c1874Slogin /* Maximum of unsigned integral types having a minimum size. */ 184*0e0c1874Slogin # define UINT_LEAST8_MAX (255) 185*0e0c1874Slogin # define UINT_LEAST16_MAX (65535) 186*0e0c1874Slogin # define UINT_LEAST32_MAX (4294967295U) 187*0e0c1874Slogin # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) 188*0e0c1874Slogin 189*0e0c1874Slogin 190*0e0c1874Slogin /* Minimum of fast signed integral types having a minimum size. */ 191*0e0c1874Slogin # define INT_FAST8_MIN (-128) 192*0e0c1874Slogin # if __WORDSIZE == 64 193*0e0c1874Slogin # define INT_FAST16_MIN (-9223372036854775807L-1) 194*0e0c1874Slogin # define INT_FAST32_MIN (-9223372036854775807L-1) 195*0e0c1874Slogin # else 196*0e0c1874Slogin # define INT_FAST16_MIN (-2147483647-1) 197*0e0c1874Slogin # define INT_FAST32_MIN (-2147483647-1) 198*0e0c1874Slogin # endif 199*0e0c1874Slogin # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) 200*0e0c1874Slogin /* Maximum of fast signed integral types having a minimum size. */ 201*0e0c1874Slogin # define INT_FAST8_MAX (127) 202*0e0c1874Slogin # if __WORDSIZE == 64 203*0e0c1874Slogin # define INT_FAST16_MAX (9223372036854775807L) 204*0e0c1874Slogin # define INT_FAST32_MAX (9223372036854775807L) 205*0e0c1874Slogin # else 206*0e0c1874Slogin # define INT_FAST16_MAX (2147483647) 207*0e0c1874Slogin # define INT_FAST32_MAX (2147483647) 208*0e0c1874Slogin # endif 209*0e0c1874Slogin # define INT_FAST64_MAX (__INT64_C(9223372036854775807)) 210*0e0c1874Slogin 211*0e0c1874Slogin /* Maximum of fast unsigned integral types having a minimum size. */ 212*0e0c1874Slogin # define UINT_FAST8_MAX (255) 213*0e0c1874Slogin # if __WORDSIZE == 64 214*0e0c1874Slogin # define UINT_FAST16_MAX (18446744073709551615UL) 215*0e0c1874Slogin # define UINT_FAST32_MAX (18446744073709551615UL) 216*0e0c1874Slogin # else 217*0e0c1874Slogin # define UINT_FAST16_MAX (4294967295U) 218*0e0c1874Slogin # define UINT_FAST32_MAX (4294967295U) 219*0e0c1874Slogin # endif 220*0e0c1874Slogin # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) 221*0e0c1874Slogin 222*0e0c1874Slogin 223*0e0c1874Slogin /* Values to test for integral types holding `void *' pointer. */ 224*0e0c1874Slogin # if __WORDSIZE == 64 225*0e0c1874Slogin # define INTPTR_MIN (-9223372036854775807L-1) 226*0e0c1874Slogin # define INTPTR_MAX (9223372036854775807L) 227*0e0c1874Slogin # define UINTPTR_MAX (18446744073709551615UL) 228*0e0c1874Slogin # else 229*0e0c1874Slogin # define INTPTR_MIN (-2147483647-1) 230*0e0c1874Slogin # define INTPTR_MAX (2147483647) 231*0e0c1874Slogin # define UINTPTR_MAX (4294967295U) 232*0e0c1874Slogin # endif 233*0e0c1874Slogin 234*0e0c1874Slogin 235*0e0c1874Slogin /* Minimum for largest signed integral type. */ 236*0e0c1874Slogin # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) 237*0e0c1874Slogin /* Maximum for largest signed integral type. */ 238*0e0c1874Slogin # define INTMAX_MAX (__INT64_C(9223372036854775807)) 239*0e0c1874Slogin 240*0e0c1874Slogin /* Maximum for largest unsigned integral type. */ 241*0e0c1874Slogin # define UINTMAX_MAX (__UINT64_C(18446744073709551615)) 242*0e0c1874Slogin 243*0e0c1874Slogin 244*0e0c1874Slogin /* Limits of other integer types. */ 245*0e0c1874Slogin 246*0e0c1874Slogin /* Limits of `ptrdiff_t' type. */ 247*0e0c1874Slogin # if __WORDSIZE == 64 248*0e0c1874Slogin # define PTRDIFF_MIN (-9223372036854775807L-1) 249*0e0c1874Slogin # define PTRDIFF_MAX (9223372036854775807L) 250*0e0c1874Slogin # else 251*0e0c1874Slogin # if __WORDSIZE32_PTRDIFF_LONG 252*0e0c1874Slogin # define PTRDIFF_MIN (-2147483647L-1) 253*0e0c1874Slogin # define PTRDIFF_MAX (2147483647L) 254*0e0c1874Slogin # else 255*0e0c1874Slogin # define PTRDIFF_MIN (-2147483647-1) 256*0e0c1874Slogin # define PTRDIFF_MAX (2147483647) 257*0e0c1874Slogin # endif 258*0e0c1874Slogin # endif 259*0e0c1874Slogin 260*0e0c1874Slogin /* Limits of `sig_atomic_t'. */ 261*0e0c1874Slogin # define SIG_ATOMIC_MIN (-2147483647-1) 262*0e0c1874Slogin # define SIG_ATOMIC_MAX (2147483647) 263*0e0c1874Slogin 264*0e0c1874Slogin /* Limit of `size_t' type. */ 265*0e0c1874Slogin # if __WORDSIZE == 64 266*0e0c1874Slogin # define SIZE_MAX (18446744073709551615UL) 267*0e0c1874Slogin # else 268*0e0c1874Slogin # if __WORDSIZE32_SIZE_ULONG 269*0e0c1874Slogin # define SIZE_MAX (4294967295UL) 270*0e0c1874Slogin # else 271*0e0c1874Slogin # define SIZE_MAX (4294967295U) 272*0e0c1874Slogin # endif 273*0e0c1874Slogin # endif 274*0e0c1874Slogin 275*0e0c1874Slogin /* Limits of `wchar_t'. */ 276*0e0c1874Slogin # ifndef WCHAR_MIN 277*0e0c1874Slogin /* These constants might also be defined in <wchar.h>. */ 278*0e0c1874Slogin # define WCHAR_MIN __WCHAR_MIN 279*0e0c1874Slogin # define WCHAR_MAX __WCHAR_MAX 280*0e0c1874Slogin # endif 281*0e0c1874Slogin 282*0e0c1874Slogin /* Limits of `wint_t'. */ 283*0e0c1874Slogin # define WINT_MIN (0u) 284*0e0c1874Slogin # define WINT_MAX (4294967295u) 285*0e0c1874Slogin 286*0e0c1874Slogin /* Signed. */ 287*0e0c1874Slogin # define INT8_C(c) c 288*0e0c1874Slogin # define INT16_C(c) c 289*0e0c1874Slogin # define INT32_C(c) c 290*0e0c1874Slogin # if __WORDSIZE == 64 291*0e0c1874Slogin # define INT64_C(c) c ## L 292*0e0c1874Slogin # else 293*0e0c1874Slogin # define INT64_C(c) c ## LL 294*0e0c1874Slogin # endif 295*0e0c1874Slogin 296*0e0c1874Slogin /* Unsigned. */ 297*0e0c1874Slogin # define UINT8_C(c) c 298*0e0c1874Slogin # define UINT16_C(c) c 299*0e0c1874Slogin # define UINT32_C(c) c ## U 300*0e0c1874Slogin # if __WORDSIZE == 64 301*0e0c1874Slogin # define UINT64_C(c) c ## UL 302*0e0c1874Slogin # else 303*0e0c1874Slogin # define UINT64_C(c) c ## ULL 304*0e0c1874Slogin # endif 305*0e0c1874Slogin 306*0e0c1874Slogin /* Maximal type. */ 307*0e0c1874Slogin # if __WORDSIZE == 64 308*0e0c1874Slogin # define INTMAX_C(c) c ## L 309*0e0c1874Slogin # define UINTMAX_C(c) c ## UL 310*0e0c1874Slogin # else 311*0e0c1874Slogin # define INTMAX_C(c) c ## LL 312*0e0c1874Slogin # define UINTMAX_C(c) c ## ULL 313*0e0c1874Slogin # endif 314*0e0c1874Slogin 315*0e0c1874Slogin 316*0e0c1874Slogin #endif /* stdint.h */