X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/1f2f436a38f7ae2d39a943ad2898d8fed4ed2e58..refs/heads/master:/include/stdint.h diff --git a/include/stdint.h b/include/stdint.h index a9e312d..f4bb4cd 100644 --- a/include/stdint.h +++ b/include/stdint.h @@ -15,45 +15,15 @@ /* from ISO/IEC 988:1999 spec */ /* 7.18.1.1 Exact-width integer types */ -#ifndef _INT8_T -#define _INT8_T -typedef signed char int8_t; -#endif /*_INT8_T */ - -#ifndef _INT16_T -#define _INT16_T -typedef short int16_t; -#endif /* _INT16_T */ - -#ifndef _INT32_T -#define _INT32_T -typedef int int32_t; -#endif /* _INT32_T */ - -#ifndef _INT64_T -#define _INT64_T -typedef long long int64_t; -#endif /* _INT64_T */ - -#ifndef _UINT8_T -#define _UINT8_T -typedef unsigned char uint8_t; -#endif /*_UINT8_T */ - -#ifndef _UINT16_T -#define _UINT16_T -typedef unsigned short uint16_t; -#endif /* _UINT16_T */ - -#ifndef _UINT32_T -#define _UINT32_T -typedef unsigned int uint32_t; -#endif /* _UINT32_T */ - -#ifndef _UINT64_T -#define _UINT64_T -typedef unsigned long long uint64_t; -#endif /* _UINT64_T */ +#include +#include +#include +#include + +#include <_types/_uint8_t.h> +#include <_types/_uint16_t.h> +#include <_types/_uint32_t.h> +#include <_types/_uint64_t.h> /* 7.18.1.2 Minimum-width integer types */ typedef int8_t int_least8_t; @@ -79,39 +49,41 @@ typedef uint64_t uint_fast64_t; /* 7.18.1.4 Integer types capable of holding object pointers */ -#ifndef _INTPTR_T -#define _INTPTR_T -typedef long intptr_t; -#endif /* _INTPTR_T */ - -#ifndef _UINTPTR_T -#define _UINTPTR_T -typedef unsigned long uintptr_t; -#endif /* _UINTPTR_T */ +#include +#include +#include /* 7.18.1.5 Greatest-width integer types */ -#ifndef _INTMAX_T -#define _INTMAX_T -#ifdef __INTMAX_TYPE__ -typedef __INTMAX_TYPE__ intmax_t; -#else /* __INTMAX_TYPE__ */ -typedef long long intmax_t; -#endif /* __INTMAX_TYPE__ */ -#endif /* _INTMAX_T */ - -#ifndef _UINTMAX_T -#define _UINTMAX_T -#ifdef __UINTMAX_TYPE__ -typedef __UINTMAX_TYPE__ uintmax_t; -#else /* __UINTMAX_TYPE__ */ -typedef unsigned long long uintmax_t; -#endif /* __UINTMAX_TYPE__ */ -#endif /* _UINTMAX_T */ +#include <_types/_intmax_t.h> +#include <_types/_uintmax_t.h> + +/* 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". */ @@ -172,42 +144,36 @@ typedef unsigned long long uintmax_t; /* 7.18.2.4 Limits of integer types capable of holding object pointers */ #if __WORDSIZE == 64 -#define INTPTR_MIN INT64_MIN -#define INTPTR_MAX INT64_MAX +#define INTPTR_MAX 9223372036854775807L #else -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX +#define INTPTR_MAX 2147483647L #endif +#define INTPTR_MIN (-INTPTR_MAX-1) #if __WORDSIZE == 64 -#define UINTPTR_MAX UINT64_MAX +#define UINTPTR_MAX 18446744073709551615UL #else -#define UINTPTR_MAX UINT32_MAX +#define UINTPTR_MAX 4294967295UL #endif /* 7.18.2.5 Limits of greatest-width integer types */ -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX - -#define UINTMAX_MAX UINT64_MAX +#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 INT64_MIN -#define PTRDIFF_MAX INT64_MAX +#define PTRDIFF_MIN INTMAX_MIN +#define PTRDIFF_MAX INTMAX_MAX #else #define PTRDIFF_MIN INT32_MIN #define PTRDIFF_MAX INT32_MAX #endif -/* We have no sig_atomic_t yet, so no SIG_ATOMIC_{MIN,MAX}. - Should end up being {-127,127} or {0,255} ... or bigger. - My bet would be on one of {U}INT32_{MIN,MAX}. */ +#define SIZE_MAX UINTPTR_MAX -#if __WORDSIZE == 64 -#define SIZE_MAX UINT64_MAX -#else -#define SIZE_MAX UINT32_MAX +#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 +#define RSIZE_MAX (SIZE_MAX >> 1) #endif #ifndef WCHAR_MAX @@ -236,18 +202,4 @@ typedef unsigned long long uintmax_t; #define SIG_ATOMIC_MIN INT32_MIN #define SIG_ATOMIC_MAX INT32_MAX -/* 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 ## U) -#define UINT16_C(v) (v ## U) -#define UINT32_C(v) (v ## U) -#define UINT64_C(v) (v ## ULL) - -#define INTMAX_C(v) (v ## LL) -#define UINTMAX_C(v) (v ## ULL) - #endif /* _STDINT_H_ */