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