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, see 16 <http://www.gnu.org/licenses/>. */ 17 18 /* 19 * ISO C99: 7.18 Integer types <stdint.h> 20 */ 21 22 #ifndef _STDINT_H 23 #define _STDINT_H 1 24 25 #include <features.h> 26 #ifdef __UCLIBC_HAS_WCHAR__ 27 #include <bits/wchar.h> 28 #endif /* __UCLIBC_HAS_WCHAR__ */ 29 #include <bits/wordsize.h> 30 31 /* Exact integral types. */ 32 33 /* Signed. */ 34 35 /* There is some amount of overlap with <sys/types.h> as known by inet code */ 36 #ifndef __int8_t_defined 37 # define __int8_t_defined 38 typedef signed char int8_t; 39 typedef short int int16_t; 40 typedef int int32_t; 41 # if __WORDSIZE == 64 42 typedef long int int64_t; 43 # else 44 __extension__ 45 typedef long long int int64_t; 46 # endif 47 #endif 48 49 /* Unsigned. */ 50 typedef unsigned char uint8_t; 51 typedef unsigned short int uint16_t; 52 #ifndef __uint32_t_defined 53 typedef unsigned int uint32_t; 54 # define __uint32_t_defined 55 #endif 56 #if __WORDSIZE == 64 57 typedef unsigned long int uint64_t; 58 #else 59 __extension__ 60 typedef unsigned long long int uint64_t; 61 #endif 62 63 64 /* Small types. */ 65 66 /* Signed. */ 67 typedef signed char int_least8_t; 68 typedef short int int_least16_t; 69 typedef int int_least32_t; 70 #if __WORDSIZE == 64 71 typedef long int int_least64_t; 72 #else 73 __extension__ 74 typedef long long int int_least64_t; 75 #endif 76 77 /* Unsigned. */ 78 typedef unsigned char uint_least8_t; 79 typedef unsigned short int uint_least16_t; 80 typedef unsigned int uint_least32_t; 81 #if __WORDSIZE == 64 82 typedef unsigned long int uint_least64_t; 83 #else 84 __extension__ 85 typedef unsigned long long int uint_least64_t; 86 #endif 87 88 89 /* Fast types. */ 90 91 /* Signed. */ 92 typedef signed char int_fast8_t; 93 #if __WORDSIZE == 64 94 typedef long int int_fast16_t; 95 typedef long int int_fast32_t; 96 typedef long int int_fast64_t; 97 #else 98 typedef int int_fast16_t; 99 typedef int int_fast32_t; 100 __extension__ 101 typedef long long int int_fast64_t; 102 #endif 103 104 /* Unsigned. */ 105 typedef unsigned char uint_fast8_t; 106 #if __WORDSIZE == 64 107 typedef unsigned long int uint_fast16_t; 108 typedef unsigned long int uint_fast32_t; 109 typedef unsigned long int uint_fast64_t; 110 #else 111 typedef unsigned int uint_fast16_t; 112 typedef unsigned int uint_fast32_t; 113 __extension__ 114 typedef unsigned long long int uint_fast64_t; 115 #endif 116 117 118 /* Types for `void *' pointers. */ 119 #if __WORDSIZE == 64 120 # ifndef __intptr_t_defined 121 typedef long int intptr_t; 122 # define __intptr_t_defined 123 # endif 124 typedef unsigned long int uintptr_t; 125 #else 126 # ifndef __intptr_t_defined 127 typedef int intptr_t; 128 # define __intptr_t_defined 129 # endif 130 typedef unsigned int uintptr_t; 131 #endif 132 133 134 /* Largest integral types. */ 135 #if __WORDSIZE == 64 136 typedef long int intmax_t; 137 typedef unsigned long int uintmax_t; 138 #else 139 __extension__ 140 typedef long long int intmax_t; 141 __extension__ 142 typedef unsigned long long int uintmax_t; 143 #endif 144 145 146 # if __WORDSIZE == 64 147 # ifndef __INT64_C 148 # define __INT64_C(c) c ## L 149 # endif 150 # ifndef __UINT64_C 151 # define __UINT64_C(c) c ## UL 152 # endif 153 # else 154 # ifndef __INT64_C 155 # define __INT64_C(c) c ## LL 156 # endif 157 # ifndef __UINT64_C 158 # define __UINT64_C(c) c ## ULL 159 # endif 160 # endif 161 162 /* Limits of integral types. */ 163 164 /* Minimum of signed integral types. */ 165 # define INT8_MIN (-128) 166 # define INT16_MIN (-32767-1) 167 # define INT32_MIN (-2147483647-1) 168 # define INT64_MIN (-__INT64_C(9223372036854775807)-1) 169 /* Maximum of signed integral types. */ 170 # define INT8_MAX (127) 171 # define INT16_MAX (32767) 172 # define INT32_MAX (2147483647) 173 # define INT64_MAX (__INT64_C(9223372036854775807)) 174 175 /* Maximum of unsigned integral types. */ 176 # define UINT8_MAX (255) 177 # define UINT16_MAX (65535) 178 # define UINT32_MAX (4294967295U) 179 # define UINT64_MAX (__UINT64_C(18446744073709551615)) 180 181 182 /* Minimum of signed integral types having a minimum size. */ 183 # define INT_LEAST8_MIN (-128) 184 # define INT_LEAST16_MIN (-32767-1) 185 # define INT_LEAST32_MIN (-2147483647-1) 186 # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) 187 /* Maximum of signed integral types having a minimum size. */ 188 # define INT_LEAST8_MAX (127) 189 # define INT_LEAST16_MAX (32767) 190 # define INT_LEAST32_MAX (2147483647) 191 # define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) 192 193 /* Maximum of unsigned integral types having a minimum size. */ 194 # define UINT_LEAST8_MAX (255) 195 # define UINT_LEAST16_MAX (65535) 196 # define UINT_LEAST32_MAX (4294967295U) 197 # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) 198 199 200 /* Minimum of fast signed integral types having a minimum size. */ 201 # define INT_FAST8_MIN (-128) 202 # if __WORDSIZE == 64 203 # define INT_FAST16_MIN (-9223372036854775807L-1) 204 # define INT_FAST32_MIN (-9223372036854775807L-1) 205 # else 206 # define INT_FAST16_MIN (-2147483647-1) 207 # define INT_FAST32_MIN (-2147483647-1) 208 # endif 209 # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) 210 /* Maximum of fast signed integral types having a minimum size. */ 211 # define INT_FAST8_MAX (127) 212 # if __WORDSIZE == 64 213 # define INT_FAST16_MAX (9223372036854775807L) 214 # define INT_FAST32_MAX (9223372036854775807L) 215 # else 216 # define INT_FAST16_MAX (2147483647) 217 # define INT_FAST32_MAX (2147483647) 218 # endif 219 # define INT_FAST64_MAX (__INT64_C(9223372036854775807)) 220 221 /* Maximum of fast unsigned integral types having a minimum size. */ 222 # define UINT_FAST8_MAX (255) 223 # if __WORDSIZE == 64 224 # define UINT_FAST16_MAX (18446744073709551615UL) 225 # define UINT_FAST32_MAX (18446744073709551615UL) 226 # else 227 # define UINT_FAST16_MAX (4294967295U) 228 # define UINT_FAST32_MAX (4294967295U) 229 # endif 230 # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) 231 232 233 /* Values to test for integral types holding `void *' pointer. */ 234 # if __WORDSIZE == 64 235 # define INTPTR_MIN (-9223372036854775807L-1) 236 # define INTPTR_MAX (9223372036854775807L) 237 # define UINTPTR_MAX (18446744073709551615UL) 238 # else 239 # define INTPTR_MIN (-2147483647-1) 240 # define INTPTR_MAX (2147483647) 241 # define UINTPTR_MAX (4294967295U) 242 # endif 243 244 245 /* Minimum for largest signed integral type. */ 246 # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) 247 /* Maximum for largest signed integral type. */ 248 # define INTMAX_MAX (__INT64_C(9223372036854775807)) 249 250 /* Maximum for largest unsigned integral type. */ 251 # define UINTMAX_MAX (__UINT64_C(18446744073709551615)) 252 253 /* Limits of other integer types. */ 254 255 /* Limits of `ptrdiff_t' type. */ 256 # if __WORDSIZE == 64 257 # define PTRDIFF_MIN (-9223372036854775807L-1) 258 # define PTRDIFF_MAX (9223372036854775807L) 259 # else 260 # define PTRDIFF_MIN (-2147483647-1) 261 # define PTRDIFF_MAX (2147483647) 262 # endif 263 264 /* Limits of `sig_atomic_t'. */ 265 # define SIG_ATOMIC_MIN (-2147483647-1) 266 # define SIG_ATOMIC_MAX (2147483647) 267 268 /* Limit of `size_t' type. */ 269 # if __WORDSIZE == 64 270 # define SIZE_MAX (18446744073709551615UL) 271 # else 272 # define SIZE_MAX (4294967295U) 273 # endif 274 275 #ifdef __UCLIBC_HAS_WCHAR__ 276 /* Limits of `wchar_t'. */ 277 # ifndef WCHAR_MIN 278 /* These constants might also be defined in <wchar.h>. */ 279 # define WCHAR_MIN __WCHAR_MIN 280 # define WCHAR_MAX __WCHAR_MAX 281 # endif 282 283 /* Limits of `wint_t'. */ 284 # define WINT_MIN (0u) 285 # define WINT_MAX (4294967295u) 286 #endif /* __UCLIBC_HAS_WCHAR__ */ 287 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 /* stdint.h */ 319