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