]> git.saurik.com Git - apple/libc.git/blobdiff - include/stdint.h
Libc-1353.11.2.tar.gz
[apple/libc.git] / include / stdint.h
index a9e312d3b6d3e4a5f72a60a2bf102bd8cc1b32fe..f4bb4cd758fc1bb95912e99dd2ada6b8bc3e1762 100644 (file)
 /* 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 <sys/_types/_int8_t.h>
+#include <sys/_types/_int16_t.h>
+#include <sys/_types/_int32_t.h>
+#include <sys/_types/_int64_t.h>
+
+#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 <sys/_types.h>
+#include <sys/_types/_intptr_t.h>
+#include <sys/_types/_uintptr_t.h>
 
 
 /* 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_ */