1 | /* Copyright (C) 1997-2015 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 | #include <bits/wchar.h> |

27 | #include <bits/wordsize.h> |

28 | |

29 | /* Exact integral types. */ |

30 | |

31 | /* Signed. */ |

32 | |

33 | /* There is some amount of overlap with <sys/types.h> as known by inet code */ |

34 | #ifndef __int8_t_defined |

35 | # define __int8_t_defined |

36 | typedef signed char int8_t; |

37 | typedef short int int16_t; |

38 | typedef int int32_t; |

39 | # if __WORDSIZE == 64 |

40 | typedef long int int64_t; |

41 | # else |

42 | __extension__ |

43 | typedef long long int int64_t; |

44 | # endif |

45 | #endif |

46 | |

47 | /* Unsigned. */ |

48 | typedef unsigned char uint8_t; |

49 | typedef unsigned short int uint16_t; |

50 | #ifndef __uint32_t_defined |

51 | typedef unsigned int uint32_t; |

52 | # define __uint32_t_defined |

53 | #endif |

54 | #if __WORDSIZE == 64 |

55 | typedef unsigned long int uint64_t; |

56 | #else |

57 | __extension__ |

58 | typedef unsigned long long int uint64_t; |

59 | #endif |

60 | |

61 | |

62 | /* Small types. */ |

63 | |

64 | /* Signed. */ |

65 | typedef signed char int_least8_t; |

66 | typedef short int int_least16_t; |

67 | typedef int int_least32_t; |

68 | #if __WORDSIZE == 64 |

69 | typedef long int int_least64_t; |

70 | #else |

71 | __extension__ |

72 | typedef long long int int_least64_t; |

73 | #endif |

74 | |

75 | /* Unsigned. */ |

76 | typedef unsigned char uint_least8_t; |

77 | typedef unsigned short int uint_least16_t; |

78 | typedef unsigned int uint_least32_t; |

79 | #if __WORDSIZE == 64 |

80 | typedef unsigned long int uint_least64_t; |

81 | #else |

82 | __extension__ |

83 | typedef unsigned long long int uint_least64_t; |

84 | #endif |

85 | |

86 | |

87 | /* Fast types. */ |

88 | |

89 | /* Signed. */ |

90 | typedef signed char int_fast8_t; |

91 | #if __WORDSIZE == 64 |

92 | typedef long int int_fast16_t; |

93 | typedef long int int_fast32_t; |

94 | typedef long int int_fast64_t; |

95 | #else |

96 | typedef int int_fast16_t; |

97 | typedef int int_fast32_t; |

98 | __extension__ |

99 | typedef long long int int_fast64_t; |

100 | #endif |

101 | |

102 | /* Unsigned. */ |

103 | typedef unsigned char uint_fast8_t; |

104 | #if __WORDSIZE == 64 |

105 | typedef unsigned long int uint_fast16_t; |

106 | typedef unsigned long int uint_fast32_t; |

107 | typedef unsigned long int uint_fast64_t; |

108 | #else |

109 | typedef unsigned int uint_fast16_t; |

110 | typedef unsigned int uint_fast32_t; |

111 | __extension__ |

112 | typedef unsigned long long int uint_fast64_t; |

113 | #endif |

114 | |

115 | |

116 | /* Types for `void *' pointers. */ |

117 | #if __WORDSIZE == 64 |

118 | # ifndef __intptr_t_defined |

119 | typedef long int intptr_t; |

120 | # define __intptr_t_defined |

121 | # endif |

122 | typedef unsigned long int uintptr_t; |

123 | #else |

124 | # ifndef __intptr_t_defined |

125 | typedef int intptr_t; |

126 | # define __intptr_t_defined |

127 | # endif |

128 | typedef unsigned int uintptr_t; |

129 | #endif |

130 | |

131 | |

132 | /* Largest integral types. */ |

133 | #if __WORDSIZE == 64 |

134 | typedef long int intmax_t; |

135 | typedef unsigned long int uintmax_t; |

136 | #else |

137 | __extension__ |

138 | typedef long long int intmax_t; |

139 | __extension__ |

140 | typedef unsigned long long int uintmax_t; |

141 | #endif |

142 | |

143 | |

144 | # if __WORDSIZE == 64 |

145 | # define __INT64_C(c) c ## L |

146 | # define __UINT64_C(c) c ## UL |

147 | # else |

148 | # define __INT64_C(c) c ## LL |

149 | # define __UINT64_C(c) c ## ULL |

150 | # endif |

151 | |

152 | /* Limits of integral types. */ |

153 | |

154 | /* Minimum of signed integral types. */ |

155 | # define INT8_MIN (-128) |

156 | # define INT16_MIN (-32767-1) |

157 | # define INT32_MIN (-2147483647-1) |

158 | # define INT64_MIN (-__INT64_C(9223372036854775807)-1) |

159 | /* Maximum of signed integral types. */ |

160 | # define INT8_MAX (127) |

161 | # define INT16_MAX (32767) |

162 | # define INT32_MAX (2147483647) |

163 | # define INT64_MAX (__INT64_C(9223372036854775807)) |

164 | |

165 | /* Maximum of unsigned integral types. */ |

166 | # define UINT8_MAX (255) |

167 | # define UINT16_MAX (65535) |

168 | # define UINT32_MAX (4294967295U) |

169 | # define UINT64_MAX (__UINT64_C(18446744073709551615)) |

170 | |

171 | |

172 | /* Minimum of signed integral types having a minimum size. */ |

173 | # define INT_LEAST8_MIN (-128) |

174 | # define INT_LEAST16_MIN (-32767-1) |

175 | # define INT_LEAST32_MIN (-2147483647-1) |

176 | # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) |

177 | /* Maximum of signed integral types having a minimum size. */ |

178 | # define INT_LEAST8_MAX (127) |

179 | # define INT_LEAST16_MAX (32767) |

180 | # define INT_LEAST32_MAX (2147483647) |

181 | # define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) |

182 | |

183 | /* Maximum of unsigned integral types having a minimum size. */ |

184 | # define UINT_LEAST8_MAX (255) |

185 | # define UINT_LEAST16_MAX (65535) |

186 | # define UINT_LEAST32_MAX (4294967295U) |

187 | # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) |

188 | |

189 | |

190 | /* Minimum of fast signed integral types having a minimum size. */ |

191 | # define INT_FAST8_MIN (-128) |

192 | # if __WORDSIZE == 64 |

193 | # define INT_FAST16_MIN (-9223372036854775807L-1) |

194 | # define INT_FAST32_MIN (-9223372036854775807L-1) |

195 | # else |

196 | # define INT_FAST16_MIN (-2147483647-1) |

197 | # define INT_FAST32_MIN (-2147483647-1) |

198 | # endif |

199 | # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) |

200 | /* Maximum of fast signed integral types having a minimum size. */ |

201 | # define INT_FAST8_MAX (127) |

202 | # if __WORDSIZE == 64 |

203 | # define INT_FAST16_MAX (9223372036854775807L) |

204 | # define INT_FAST32_MAX (9223372036854775807L) |

205 | # else |

206 | # define INT_FAST16_MAX (2147483647) |

207 | # define INT_FAST32_MAX (2147483647) |

208 | # endif |

209 | # define INT_FAST64_MAX (__INT64_C(9223372036854775807)) |

210 | |

211 | /* Maximum of fast unsigned integral types having a minimum size. */ |

212 | # define UINT_FAST8_MAX (255) |

213 | # if __WORDSIZE == 64 |

214 | # define UINT_FAST16_MAX (18446744073709551615UL) |

215 | # define UINT_FAST32_MAX (18446744073709551615UL) |

216 | # else |

217 | # define UINT_FAST16_MAX (4294967295U) |

218 | # define UINT_FAST32_MAX (4294967295U) |

219 | # endif |

220 | # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) |

221 | |

222 | |

223 | /* Values to test for integral types holding `void *' pointer. */ |

224 | # if __WORDSIZE == 64 |

225 | # define INTPTR_MIN (-9223372036854775807L-1) |

226 | # define INTPTR_MAX (9223372036854775807L) |

227 | # define UINTPTR_MAX (18446744073709551615UL) |

228 | # else |

229 | # define INTPTR_MIN (-2147483647-1) |

230 | # define INTPTR_MAX (2147483647) |

231 | # define UINTPTR_MAX (4294967295U) |

232 | # endif |

233 | |

234 | |

235 | /* Minimum for largest signed integral type. */ |

236 | # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) |

237 | /* Maximum for largest signed integral type. */ |

238 | # define INTMAX_MAX (__INT64_C(9223372036854775807)) |

239 | |

240 | /* Maximum for largest unsigned integral type. */ |

241 | # define UINTMAX_MAX (__UINT64_C(18446744073709551615)) |

242 | |

243 | |

244 | /* Limits of other integer types. */ |

245 | |

246 | /* Limits of `ptrdiff_t' type. */ |

247 | # if __WORDSIZE == 64 |

248 | # define PTRDIFF_MIN (-9223372036854775807L-1) |

249 | # define PTRDIFF_MAX (9223372036854775807L) |

250 | # else |

251 | # define PTRDIFF_MIN (-2147483647-1) |

252 | # define PTRDIFF_MAX (2147483647) |

253 | # endif |

254 | |

255 | /* Limits of `sig_atomic_t'. */ |

256 | # define SIG_ATOMIC_MIN (-2147483647-1) |

257 | # define SIG_ATOMIC_MAX (2147483647) |

258 | |

259 | /* Limit of `size_t' type. */ |

260 | # if __WORDSIZE == 64 |

261 | # define SIZE_MAX (18446744073709551615UL) |

262 | # else |

263 | # ifdef __WORDSIZE32_SIZE_ULONG |

264 | # define SIZE_MAX (4294967295UL) |

265 | # else |

266 | # define SIZE_MAX (4294967295U) |

267 | # endif |

268 | # endif |

269 | |

270 | /* Limits of `wchar_t'. */ |

271 | # ifndef WCHAR_MIN |

272 | /* These constants might also be defined in <wchar.h>. */ |

273 | # define WCHAR_MIN __WCHAR_MIN |

274 | # define WCHAR_MAX __WCHAR_MAX |

275 | # endif |

276 | |

277 | /* Limits of `wint_t'. */ |

278 | # define WINT_MIN (0u) |

279 | # define WINT_MAX (4294967295u) |

280 | |

281 | /* Signed. */ |

282 | # define INT8_C(c) c |

283 | # define INT16_C(c) c |

284 | # define INT32_C(c) c |

285 | # if __WORDSIZE == 64 |

286 | # define INT64_C(c) c ## L |

287 | # else |

288 | # define INT64_C(c) c ## LL |

289 | # endif |

290 | |

291 | /* Unsigned. */ |

292 | # define UINT8_C(c) c |

293 | # define UINT16_C(c) c |

294 | # define UINT32_C(c) c ## U |

295 | # if __WORDSIZE == 64 |

296 | # define UINT64_C(c) c ## UL |

297 | # else |

298 | # define UINT64_C(c) c ## ULL |

299 | # endif |

300 | |

301 | /* Maximal type. */ |

302 | # if __WORDSIZE == 64 |

303 | # define INTMAX_C(c) c ## L |

304 | # define UINTMAX_C(c) c ## UL |

305 | # else |

306 | # define INTMAX_C(c) c ## LL |

307 | # define UINTMAX_C(c) c ## ULL |

308 | # endif |

309 | |

310 | #endif /* stdint.h */ |

311 |