summary refs log tree commit diff stats
path: root/tinyc/win32/include/stdint.h
diff options
context:
space:
mode:
Diffstat (limited to 'tinyc/win32/include/stdint.h')
-rw-r--r--tinyc/win32/include/stdint.h62
1 files changed, 45 insertions, 17 deletions
diff --git a/tinyc/win32/include/stdint.h b/tinyc/win32/include/stdint.h
index 71c6708ff..cde32b6e3 100644
--- a/tinyc/win32/include/stdint.h
+++ b/tinyc/win32/include/stdint.h
@@ -1,3 +1,8 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
 /* ISO C9x  7.18  Integer types <stdint.h>
  * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794)
  *
@@ -20,6 +25,14 @@
 #ifndef _STDINT_H
 #define _STDINT_H
 
+#include <_mingw.h>
+
+#define __need_wint_t
+#define __need_wchar_t
+#include "stddef.h"
+
+#ifndef __int8_t_defined
+#define __int8_t_defined
 /* 7.18.1.1  Exact-width integer types */
 typedef signed char int8_t;
 typedef unsigned char   uint8_t;
@@ -29,6 +42,7 @@ typedef int  int32_t;
 typedef unsigned   uint32_t;
 typedef long long  int64_t;
 typedef unsigned long long   uint64_t;
+#endif
 
 /* 7.18.1.2  Minimum-width integer types */
 typedef signed char int_least8_t;
@@ -40,9 +54,9 @@ typedef unsigned   uint_least32_t;
 typedef long long  int_least64_t;
 typedef unsigned long long   uint_least64_t;
 
-/*  7.18.1.3  Fastest minimum-width integer types 
+/*  7.18.1.3  Fastest minimum-width integer types
  *  Not actually guaranteed to be fastest for all purposes
- *  Here we use the exact-width types for 8 and 16-bit ints. 
+ *  Here we use the exact-width types for 8 and 16-bit ints.
  */
 typedef char int_fast8_t;
 typedef unsigned char uint_fast8_t;
@@ -53,10 +67,6 @@ typedef unsigned  int  uint_fast32_t;
 typedef long long  int_fast64_t;
 typedef unsigned long long   uint_fast64_t;
 
-/* 7.18.1.4  Integer types capable of holding object pointers */
-typedef int intptr_t;
-typedef unsigned uintptr_t;
-
 /* 7.18.1.5  Greatest-width integer types */
 typedef long long  intmax_t;
 typedef unsigned long long   uintmax_t;
@@ -65,7 +75,7 @@ typedef unsigned long long   uintmax_t;
 #if !defined ( __cplusplus) || defined (__STDC_LIMIT_MACROS)
 
 /* 7.18.2.1  Limits of exact-width integer types */
-#define INT8_MIN (-128) 
+#define INT8_MIN (-128)
 #define INT16_MIN (-32768)
 #define INT32_MIN (-2147483647 - 1)
 #define INT64_MIN  (-9223372036854775807LL - 1)
@@ -113,10 +123,16 @@ typedef unsigned long long   uintmax_t;
 #define UINT_FAST64_MAX UINT64_MAX
 
 /* 7.18.2.4  Limits of integer types capable of holding
-    object pointers */ 
+    object pointers */
+#ifdef _WIN64
+#define INTPTR_MIN INT64_MIN
+#define INTPTR_MAX INT64_MAX
+#define UINTPTR_MAX UINT64_MAX
+#else
 #define INTPTR_MIN INT32_MIN
 #define INTPTR_MAX INT32_MAX
 #define UINTPTR_MAX UINT32_MAX
+#endif
 
 /* 7.18.2.5  Limits of greatest-width integer types */
 #define INTMAX_MIN INT64_MIN
@@ -124,25 +140,35 @@ typedef unsigned long long   uintmax_t;
 #define UINTMAX_MAX UINT64_MAX
 
 /* 7.18.3  Limits of other integer types */
+#ifdef _WIN64
+#define PTRDIFF_MIN INT64_MIN
+#define PTRDIFF_MAX INT64_MAX
+#else
 #define PTRDIFF_MIN INT32_MIN
 #define PTRDIFF_MAX INT32_MAX
+#endif
 
 #define SIG_ATOMIC_MIN INT32_MIN
 #define SIG_ATOMIC_MAX INT32_MAX
 
+#ifndef SIZE_MAX
+#ifdef _WIN64
+#define SIZE_MAX UINT64_MAX
+#else
 #define SIZE_MAX UINT32_MAX
+#endif
+#endif
 
-#ifndef WCHAR_MIN  /* also in wchar.h */ 
+#ifndef WCHAR_MIN  /* also in wchar.h */
 #define WCHAR_MIN 0
 #define WCHAR_MAX ((wchar_t)-1) /* UINT16_MAX */
 #endif
 
 /*
- * wint_t is unsigned int in __MINGW32__,
- * but unsigned short in MS runtime
+ * wint_t is unsigned short for compatibility with MS runtime
  */
 #define WINT_MIN 0
-#define WINT_MAX UINT32_MAX
+#define WINT_MAX ((wint_t)-1) /* UINT16_MAX */
 
 #endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */
 
@@ -152,7 +178,7 @@ typedef unsigned long long   uintmax_t;
 
 /* 7.18.4.1  Macros for minimum-width integer constants
 
-    Accoding to Douglas Gwyn <gwyn@arl.mil>:
+    According to Douglas Gwyn <gwyn@arl.mil>:
 	"This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
 	9899:1999 as initially published, the expansion was required
 	to be an integer constant of precisely matching type, which
@@ -168,16 +194,18 @@ typedef unsigned long long   uintmax_t;
 #define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val))
 #define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val))
 #define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val))
-#define INT64_C(val) (INT_LEAST64_MAX-INT_LEAST64_MAX+(val))
+/*  The 'trick' doesn't work in C89 for long long because, without
+    suffix, (val) will be evaluated as int, not intmax_t */
+#define INT64_C(val) val##LL
 
 #define UINT8_C(val) (UINT_LEAST8_MAX-UINT_LEAST8_MAX+(val))
 #define UINT16_C(val) (UINT_LEAST16_MAX-UINT_LEAST16_MAX+(val))
 #define UINT32_C(val) (UINT_LEAST32_MAX-UINT_LEAST32_MAX+(val))
-#define UINT64_C(val) (UINT_LEAST64_MAX-UINT_LEAST64_MAX+(val))
+#define UINT64_C(val) val##ULL
 
 /* 7.18.4.2  Macros for greatest-width integer constants */
-#define INTMAX_C(val) (INTMAX_MAX-INTMAX_MAX+(val))
-#define UINTMAX_C(val) (UINTMAX_MAX-UINTMAX_MAX+(val))
+#define INTMAX_C(val) val##LL
+#define UINTMAX_C(val) val##ULL
 
 #endif  /* !defined ( __cplusplus) || defined __STDC_CONSTANT_MACROS */