1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 #ifndef _STDINT_H 29 #define _STDINT_H 30 31 #include <stddef.h> 32 #include <sys/_types.h> 33 34 35 36 #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) 37 # define __STDINT_LIMITS 38 #endif 39 40 #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) 41 # define __STDINT_MACROS 42 #endif 43 44 #if !defined __STRICT_ANSI__ || __STDC_VERSION__ >= 199901L 45 # define __STDC_INT64__ 46 #endif 47 48 typedef __int8_t int8_t; 49 typedef __uint8_t uint8_t; 50 typedef __int16_t int16_t; 51 typedef __uint16_t uint16_t; 52 typedef __int32_t int32_t; 53 typedef __uint32_t uint32_t; 54 #if defined(__STDC_INT64__) 55 typedef __int64_t int64_t; 56 typedef __uint64_t uint64_t; 57 #endif 58 59 /* 60 * int8_t & uint8_t 61 */ 62 63 typedef int8_t int_least8_t; 64 typedef int8_t int_fast8_t; 65 66 typedef uint8_t uint_least8_t; 67 typedef uint8_t uint_fast8_t; 68 69 #ifdef __STDINT_LIMITS 70 # define INT8_MIN (-128) 71 # define INT8_MAX (127) 72 # define INT_LEAST8_MIN INT8_MIN 73 # define INT_LEAST8_MAX INT8_MAX 74 # define INT_FAST8_MIN INT8_MIN 75 # define INT_FAST8_MAX INT8_MAX 76 77 # define UINT8_MAX (255U) 78 # define UINT_LEAST8_MAX UINT8_MAX 79 # define UINT_FAST8_MAX UINT8_MAX 80 #endif 81 82 #ifdef __STDINT_MACROS 83 # define INT8_C(c) c 84 # define INT_LEAST8_C(c) INT8_C(c) 85 # define INT_FAST8_C(c) INT8_C(c) 86 87 # define UINT8_C(c) c ## U 88 # define UINT_LEAST8_C(c) UINT8_C(c) 89 # define UINT_FAST8_C(c) UINT8_C(c) 90 #endif 91 92 /* 93 * int16_t & uint16_t 94 */ 95 96 97 typedef int16_t int_least16_t; 98 typedef int32_t int_fast16_t; 99 100 typedef uint16_t uint_least16_t; 101 typedef uint32_t uint_fast16_t; 102 103 #ifdef __STDINT_LIMITS 104 # define INT16_MIN (-32768) 105 # define INT16_MAX (32767) 106 # define INT_LEAST16_MIN INT16_MIN 107 # define INT_LEAST16_MAX INT16_MAX 108 # define INT_FAST16_MIN INT32_MIN 109 # define INT_FAST16_MAX INT32_MAX 110 111 # define UINT16_MAX (65535U) 112 # define UINT_LEAST16_MAX UINT16_MAX 113 # define UINT_FAST16_MAX UINT32_MAX 114 #endif 115 116 #ifdef __STDINT_MACROS 117 # define INT16_C(c) c 118 # define INT_LEAST16_C(c) INT16_C(c) 119 # define INT_FAST16_C(c) INT32_C(c) 120 121 # define UINT16_C(c) c ## U 122 # define UINT_LEAST16_C(c) UINT16_C(c) 123 # define UINT_FAST16_C(c) UINT32_C(c) 124 #endif 125 126 /* 127 * int32_t & uint32_t 128 */ 129 130 typedef int32_t int_least32_t; 131 typedef int32_t int_fast32_t; 132 133 typedef uint32_t uint_least32_t; 134 typedef uint32_t uint_fast32_t; 135 136 #ifdef __STDINT_LIMITS 137 # define INT32_MIN (-2147483647-1) 138 # define INT32_MAX (2147483647) 139 # define INT_LEAST32_MIN INT32_MIN 140 # define INT_LEAST32_MAX INT32_MAX 141 # define INT_FAST32_MIN INT32_MIN 142 # define INT_FAST32_MAX INT32_MAX 143 144 # define UINT32_MAX (4294967295U) 145 # define UINT_LEAST32_MAX UINT32_MAX 146 # define UINT_FAST32_MAX UINT32_MAX 147 #endif 148 149 #ifdef __STDINT_MACROS 150 # define INT32_C(c) c 151 # define INT_LEAST32_C(c) INT32_C(c) 152 # define INT_FAST32_C(c) INT32_C(c) 153 154 # define UINT32_C(c) c ## U 155 # define UINT_LEAST32_C(c) UINT32_C(c) 156 # define UINT_FAST32_C(c) UINT32_C(c) 157 #endif 158 159 #if defined(__STDC_INT64__) 160 /* 161 * int64_t 162 */ 163 typedef int64_t int_least64_t; 164 typedef int64_t int_fast64_t; 165 166 typedef uint64_t uint_least64_t; 167 typedef uint64_t uint_fast64_t; 168 169 170 #ifdef __STDINT_LIMITS 171 # define INT64_MIN (__INT64_C(-9223372036854775807)-1) 172 # define INT64_MAX (__INT64_C(9223372036854775807)) 173 # define INT_LEAST64_MIN INT64_MIN 174 # define INT_LEAST64_MAX INT64_MAX 175 # define INT_FAST64_MIN INT64_MIN 176 # define INT_FAST64_MAX INT64_MAX 177 # define UINT64_MAX (__UINT64_C(18446744073709551615)) 178 179 # define UINT_LEAST64_MAX UINT64_MAX 180 # define UINT_FAST64_MAX UINT64_MAX 181 #endif 182 183 #define __INT64_C(c) c ## LL 184 #define __UINT64_C(c) c ## ULL 185 186 #ifdef __STDINT_MACROS 187 # define INT64_C(c) __INT64_C(c) 188 # define INT_LEAST64_C(c) INT64_C(c) 189 # define INT_FAST64_C(c) INT64_C(c) 190 191 # define UINT64_C(c) __UINT64_C(c) 192 # define UINT_LEAST64_C(c) UINT64_C(c) 193 # define UINT_FAST64_C(c) UINT64_C(c) 194 #endif 195 196 197 # define __PRI64_RANK "ll" 198 # define __PRIFAST_RANK "" 199 # define __PRIPTR_RANK "" 200 201 #endif /* __STDC_INT64__ */ 202 203 /* 204 * intptr_t & uintptr_t 205 */ 206 207 typedef int intptr_t; 208 typedef unsigned int uintptr_t; 209 210 #ifdef __STDINT_LIMITS 211 # define INTPTR_MIN INT32_MIN 212 # define INTPTR_MAX INT32_MAX 213 # define UINTPTR_MAX UINT32_MAX 214 # define PTRDIFF_MIN INT32_MIN 215 # define PTRDIFF_MAX INT32_MAX 216 #endif 217 218 #ifdef __STDINT_MACROS 219 # define INTPTR_C(c) INT32_C(c) 220 # define UINTPTR_C(c) UINT32_C(c) 221 # define PTRDIFF_C(c) INT32_C(c) 222 #endif 223 224 225 226 /* 227 * intmax_t & uintmax_t 228 */ 229 230 #if defined(__STDC_INT64__) 231 232 typedef uint64_t uintmax_t; 233 typedef int64_t intmax_t; 234 235 #ifdef __STDINT_LIMITS 236 # define INTMAX_MIN INT64_MIN 237 # define INTMAX_MAX INT64_MAX 238 # define UINTMAX_MAX UINT64_MAX 239 #endif 240 241 #ifdef __STDINT_MACROS 242 # define INTMAX_C(c) INT64_C(c) 243 # define UINTMAX_C(c) UINT64_C(c) 244 #endif 245 246 #else /* !__STDC_INT64__ */ 247 248 typedef uint32_t uintmax_t; 249 typedef int32_t intmax_t; 250 251 #ifdef __STDINT_LIMITS 252 # define INTMAX_MIN INT32_MIN 253 # define INTMAX_MAX INT32_MAX 254 # define UINTMAX_MAX UINT32_MAX 255 #endif 256 257 #ifdef __STDINT_MACROS 258 # define INTMAX_C(c) INT32_C(c) 259 # define UINTMAX_C(c) UINT32_C(c) 260 #endif 261 262 #endif /* !__STDC_INT64__ */ 263 264 265 /* size_t is defined by the GCC-specific <stddef.h> */ 266 #ifndef _SSIZE_T_DEFINED_ 267 #define _SSIZE_T_DEFINED_ 268 typedef long int ssize_t; 269 #endif 270 271 #define _BITSIZE 32 272 273 /* Keep the kernel from trying to define these types... */ 274 #define __BIT_TYPES_DEFINED__ 275 276 #endif /* _STDINT_H */ 277