Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | /* * Copyright (c) 2000-2010 Apple Inc. * All rights reserved. */ #if (defined(__has_include) && __has_include(<__xnu_libcxx_sentinel.h>) && !defined(XNU_LIBCXX_SDKROOT)) #if !__has_include_next(<stdint.h>) #error Do not build with -nostdinc (use GCC_USE_STANDARD_INCLUDE_SEARCHING=NO) #endif /* __has_include_next */ #include_next <stdint.h> #else /* (defined(__has_include) && __has_include(<__xnu_libcxx_sentinel.h>) && !defined(XNU_LIBCXX_SDKROOT)) */ #ifndef _KERNEL_STDINT_H_ #define _KERNEL_STDINT_H_ #ifndef KERNEL /* For user-space code that may include this header */ #include_next <stdint.h> #else /* KERNEL */ #include <machine/types.h> #if __LP64__ #define __WORDSIZE 64 #else #define __WORDSIZE 32 #endif /* from ISO/IEC 988:1999 spec */ /* 7.18.1.1 Exact-width integer types */ /* int8_t is defined in <machine/types.h> */ /* int16_t is defined in <machine/types.h> */ /* int32_t is defined in <machine/types.h> */ /* int64_t is defined in <machine/types.h> */ typedef u_int8_t uint8_t; /* u_int8_t is defined in <machine/types.h> */ typedef u_int16_t uint16_t; /* u_int16_t is defined in <machine/types.h> */ typedef u_int32_t uint32_t; /* u_int32_t is defined in <machine/types.h> */ typedef u_int64_t uint64_t; /* u_int64_t is defined in <machine/types.h> */ /* 7.18.1.2 Minimum-width integer types */ typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; typedef int64_t int_least64_t; typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; typedef uint64_t uint_least64_t; /* 7.18.1.3 Fastest-width integer types */ typedef int8_t int_fast8_t; typedef int16_t int_fast16_t; typedef int32_t int_fast32_t; typedef int64_t int_fast64_t; typedef uint8_t uint_fast8_t; typedef uint16_t uint_fast16_t; typedef uint32_t uint_fast32_t; typedef uint64_t uint_fast64_t; /* 7.18.1.4 Integer types capable of holding object pointers */ /* intptr_t is defined in <machine/types.h> */ /* uintptr_t is defined in <machine/types.h> */ /* 7.18.1.5 Greatest-width integer types */ #ifdef __INTMAX_TYPE__ typedef __INTMAX_TYPE__ intmax_t; #else #ifdef __LP64__ typedef long int intmax_t; #else typedef long long int intmax_t; #endif /* __LP64__ */ #endif /* __INTMAX_TYPE__ */ #ifdef __UINTMAX_TYPE__ typedef __UINTMAX_TYPE__ uintmax_t; #else #ifdef __LP64__ typedef long unsigned int uintmax_t; #else typedef long long unsigned int uintmax_t; #endif /* __LP64__ */ #endif /* __UINTMAX_TYPE__ */ /* 7.18.4 Macros for integer constants */ #define INT8_C(v) (v) #define INT16_C(v) (v) #define INT32_C(v) (v) #define INT64_C(v) (v ## LL) #define UINT8_C(v) (v) #define UINT16_C(v) (v) #define UINT32_C(v) (v ## U) #define UINT64_C(v) (v ## ULL) #ifdef __LP64__ #define INTMAX_C(v) (v ## L) #define UINTMAX_C(v) (v ## UL) #else #define INTMAX_C(v) (v ## LL) #define UINTMAX_C(v) (v ## ULL) #endif /* 7.18.2 Limits of specified-width integer types: * These #defines specify the minimum and maximum limits * of each of the types declared above. * * They must have "the same type as would an expression that is an * object of the corresponding type converted according to the integer * promotion". */ /* 7.18.2.1 Limits of exact-width integer types */ #define INT8_MAX 127 #define INT16_MAX 32767 #define INT32_MAX 2147483647 #define INT64_MAX 9223372036854775807LL #define INT8_MIN -128 #define INT16_MIN -32768 /* * Note: the literal "most negative int" cannot be written in C -- * the rules in the standard (section 6.4.4.1 in C99) will give it * an unsigned type, so INT32_MIN (and the most negative member of * any larger signed type) must be written via a constant expression. */ #define INT32_MIN (-INT32_MAX-1) #define INT64_MIN (-INT64_MAX-1) #define UINT8_MAX 255 #define UINT16_MAX 65535 #define UINT32_MAX 4294967295U #define UINT64_MAX 18446744073709551615ULL /* 7.18.2.2 Limits of minimum-width integer types */ #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX /* 7.18.2.3 Limits of fastest minimum-width integer types */ #define INT_FAST8_MIN INT8_MIN #define INT_FAST16_MIN INT16_MIN #define INT_FAST32_MIN INT32_MIN #define INT_FAST64_MIN INT64_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX /* 7.18.2.4 Limits of integer types capable of holding object pointers */ #if __WORDSIZE == 64 #define INTPTR_MAX 9223372036854775807L #else #define INTPTR_MAX 2147483647L #endif #define INTPTR_MIN (-INTPTR_MAX-1) #if __WORDSIZE == 64 #define UINTPTR_MAX 18446744073709551615UL #else #define UINTPTR_MAX 4294967295UL #endif /* 7.18.2.5 Limits of greatest-width integer types */ #define INTMAX_MAX INTMAX_C(9223372036854775807) #define UINTMAX_MAX UINTMAX_C(18446744073709551615) #define INTMAX_MIN (-INTMAX_MAX-1) /* 7.18.3 "Other" */ #if __WORDSIZE == 64 #define PTRDIFF_MIN INTMAX_MIN #define PTRDIFF_MAX INTMAX_MAX #else #define PTRDIFF_MIN INT32_MIN #define PTRDIFF_MAX INT32_MAX #endif #define SIZE_MAX UINTPTR_MAX #if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 #define RSIZE_MAX (SIZE_MAX >> 1) #endif #ifndef WCHAR_MAX # ifdef __WCHAR_MAX__ # define WCHAR_MAX __WCHAR_MAX__ # else # define WCHAR_MAX 0x7fffffff # endif #endif /* WCHAR_MIN should be 0 if wchar_t is an unsigned type and * (-WCHAR_MAX-1) if wchar_t is a signed type. Unfortunately, * it turns out that -fshort-wchar changes the signedness of * the type. */ #ifndef WCHAR_MIN # if WCHAR_MAX == 0xffff # define WCHAR_MIN 0 # else # define WCHAR_MIN (-WCHAR_MAX-1) # endif #endif #define WINT_MIN INT32_MIN #define WINT_MAX INT32_MAX #define SIG_ATOMIC_MIN INT32_MIN #define SIG_ATOMIC_MAX INT32_MAX #endif /* KERNEL */ #endif /* _KERNEL_STDINT_H_ */ #endif |