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 /* The ISO C99 standard specifies that in C++ implementations these 147 macros should only be defined if explicitly requested. */ 148 #if !defined __cplusplus || defined __STDC_LIMIT_MACROS 149 150 # if __WORDSIZE == 64 151 # define __INT64_C(c) c ## L 152 # define __UINT64_C(c) c ## UL 153 # else 154 # define __INT64_C(c) c ## LL 155 # define __UINT64_C(c) c ## ULL 156 # endif 157 158 /* Limits of integral types. */ 159 160 /* Minimum of signed integral types. */ 161 # define INT8_MIN (-128) 162 # define INT16_MIN (-32767-1) 163 # define INT32_MIN (-2147483647-1) 164 # define INT64_MIN (-__INT64_C(9223372036854775807)-1) 165 /* Maximum of signed integral types. */ 166 # define INT8_MAX (127) 167 # define INT16_MAX (32767) 168 # define INT32_MAX (2147483647) 169 # define INT64_MAX (__INT64_C(9223372036854775807)) 170 171 /* Maximum of unsigned integral types. */ 172 # define UINT8_MAX (255) 173 # define UINT16_MAX (65535) 174 # define UINT32_MAX (4294967295U) 175 # define UINT64_MAX (__UINT64_C(18446744073709551615)) 176 177 178 /* Minimum of signed integral types having a minimum size. */ 179 # define INT_LEAST8_MIN (-128) 180 # define INT_LEAST16_MIN (-32767-1) 181 # define INT_LEAST32_MIN (-2147483647-1) 182 # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) 183 /* Maximum of signed integral types having a minimum size. */ 184 # define INT_LEAST8_MAX (127) 185 # define INT_LEAST16_MAX (32767) 186 # define INT_LEAST32_MAX (2147483647) 187 # define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) 188 189 /* Maximum of unsigned integral types having a minimum size. */ 190 # define UINT_LEAST8_MAX (255) 191 # define UINT_LEAST16_MAX (65535) 192 # define UINT_LEAST32_MAX (4294967295U) 193 # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) 194 195 196 /* Minimum of fast signed integral types having a minimum size. */ 197 # define INT_FAST8_MIN (-128) 198 # if __WORDSIZE == 64 199 # define INT_FAST16_MIN (-9223372036854775807L-1) 200 # define INT_FAST32_MIN (-9223372036854775807L-1) 201 # else 202 # define INT_FAST16_MIN (-2147483647-1) 203 # define INT_FAST32_MIN (-2147483647-1) 204 # endif 205 # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) 206 /* Maximum of fast signed integral types having a minimum size. */ 207 # define INT_FAST8_MAX (127) 208 # if __WORDSIZE == 64 209 # define INT_FAST16_MAX (9223372036854775807L) 210 # define INT_FAST32_MAX (9223372036854775807L) 211 # else 212 # define INT_FAST16_MAX (2147483647) 213 # define INT_FAST32_MAX (2147483647) 214 # endif 215 # define INT_FAST64_MAX (__INT64_C(9223372036854775807)) 216 217 /* Maximum of fast unsigned integral types having a minimum size. */ 218 # define UINT_FAST8_MAX (255) 219 # if __WORDSIZE == 64 220 # define UINT_FAST16_MAX (18446744073709551615UL) 221 # define UINT_FAST32_MAX (18446744073709551615UL) 222 # else 223 # define UINT_FAST16_MAX (4294967295U) 224 # define UINT_FAST32_MAX (4294967295U) 225 # endif 226 # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) 227 228 229 /* Values to test for integral types holding `void *' pointer. */ 230 # if __WORDSIZE == 64 231 # define INTPTR_MIN (-9223372036854775807L-1) 232 # define INTPTR_MAX (9223372036854775807L) 233 # define UINTPTR_MAX (18446744073709551615UL) 234 # else 235 # define INTPTR_MIN (-2147483647-1) 236 # define INTPTR_MAX (2147483647) 237 # define UINTPTR_MAX (4294967295U) 238 # endif 239 240 241 #if !defined(__H8300H__) && !defined(__H8300S__) 242 /* Minimum for largest signed integral type. */ 243 # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) 244 /* Maximum for largest signed integral type. */ 245 # define INTMAX_MAX (__INT64_C(9223372036854775807)) 246 247 /* Maximum for largest unsigned integral type. */ 248 # define UINTMAX_MAX (__UINT64_C(18446744073709551615)) 249 #else 250 /* Minimum for largest signed integral type. */ 251 # define INTMAX_MIN (-LONG_LONG_MAX-1) 252 /* Maximum for largest signed integral type. */ 253 # define INTMAX_MAX (LONG_LONG_MAX) 254 255 /* Maximum for largest unsigned integral type. */ 256 # define UINTMAX_MAX (LONG_LONG_MAX<<1+1) 257 #endif 258 259 /* Limits of other integer types. */ 260 261 /* Limits of `ptrdiff_t' type. */ 262 # if __WORDSIZE == 64 263 # define PTRDIFF_MIN (-9223372036854775807L-1) 264 # define PTRDIFF_MAX (9223372036854775807L) 265 # else 266 # define PTRDIFF_MIN (-2147483647-1) 267 # define PTRDIFF_MAX (2147483647) 268 # endif 269 270 /* Limits of `sig_atomic_t'. */ 271 # define SIG_ATOMIC_MIN (-2147483647-1) 272 # define SIG_ATOMIC_MAX (2147483647) 273 274 /* Limit of `size_t' type. */ 275 # if __WORDSIZE == 64 276 # define SIZE_MAX (18446744073709551615UL) 277 # else 278 # define SIZE_MAX (4294967295U) 279 # endif 280 281 #ifdef __UCLIBC_HAS_WCHAR__ 282 /* Limits of `wchar_t'. */ 283 # ifndef WCHAR_MIN 284 /* These constants might also be defined in <wchar.h>. */ 285 # define WCHAR_MIN __WCHAR_MIN 286 # define WCHAR_MAX __WCHAR_MAX 287 # endif 288 289 /* Limits of `wint_t'. */ 290 # define WINT_MIN (0u) 291 # define WINT_MAX (4294967295u) 292 #endif /* __UCLIBC_HAS_WCHAR__ */ 293 294 #endif /* C++ && limit macros */ 295 296 297 /* The ISO C99 standard specifies that in C++ implementations these 298 should only be defined if explicitly requested. */ 299 #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS 300 301 /* Signed. */ 302 # define INT8_C(c) c 303 # define INT16_C(c) c 304 # define INT32_C(c) c 305 # if __WORDSIZE == 64 306 # define INT64_C(c) c ## L 307 # else 308 # define INT64_C(c) c ## LL 309 # endif 310 311 /* Unsigned. */ 312 # define UINT8_C(c) c 313 # define UINT16_C(c) c 314 # define UINT32_C(c) c ## U 315 # if __WORDSIZE == 64 316 # define UINT64_C(c) c ## UL 317 # else 318 # define UINT64_C(c) c ## ULL 319 # endif 320 321 /* Maximal type. */ 322 # if __WORDSIZE == 64 323 # define INTMAX_C(c) c ## L 324 # define UINTMAX_C(c) c ## UL 325 # else 326 # define INTMAX_C(c) c ## LL 327 # define UINTMAX_C(c) c ## ULL 328 # endif 329 330 #endif /* C++ && constant macros */ 331 332 #endif /* stdint.h */ 333