summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-09-19 17:39:51 -0400
committerRich Felker <dalias@aerifal.cx>2011-09-19 17:39:51 -0400
commit224c7a376acbc2feda12169b806e9845c828595e (patch)
tree69a72217cdf67552ffd69f5fbbfb4a5cf4db91c8 /include
parent089aeb08a083d798b59fc84cbff9383f304b1b8f (diff)
downloadmusl-224c7a376acbc2feda12169b806e9845c828595e.tar.gz
fix the type of wchar_t on arm; support wchar_t varying with arch
really wchar_t should never vary, but the ARM EABI defines it as an unsigned 32-bit int instead of a signed one, and gcc follows this nonsense. thus, to give a conformant environment, we have to follow (otherwise L""[0] and L'\0' would be 0U rather than 0, but the application would be unaware due to a mismatched definition for WCHAR_MIN and WCHAR_MAX, and Bad Things could happen with respect to signed/unsigned comparisons, promotions, etc.). fortunately no rules are imposed by the C standard on the relationship between wchar_t and wint_t, and WEOF has type wint_t, so we can still make wint_t always-signed and use -1 for WEOF.
Diffstat (limited to 'include')
-rw-r--r--include/stdint.h13
-rw-r--r--include/wchar.h8
2 files changed, 6 insertions, 15 deletions
diff --git a/include/stdint.h b/include/stdint.h
index a4c73b5e..54006678 100644
--- a/include/stdint.h
+++ b/include/stdint.h
@@ -71,19 +71,14 @@ typedef unsigned long long uintmax_t;
#define UINT_LEAST32_MAX UINT32_MAX
#define UINT_LEAST64_MAX UINT64_MAX
-#undef WCHAR_MIN
-#undef WCHAR_MAX
-#undef WINT_MIN
-#undef WINT_MAX
-#define WCHAR_MIN INT32_MIN
-#define WCHAR_MAX INT32_MAX
-#define WINT_MIN INT32_MIN
-#define WINT_MAX INT32_MAX
-
#define INTMAX_MIN INT64_MIN
#define INTMAX_MAX INT64_MAX
#define UINTMAX_MAX UINT64_MAX
+#define WINT_MIN INT32_MIN
+#define WINT_MAX INT32_MAX
+
+#include <bits/wchar.h>
#include <bits/stdint.h>
#endif
diff --git a/include/wchar.h b/include/wchar.h
index c3d8b045..87e244a3 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -17,6 +17,8 @@ extern "C" {
#include <bits/alltypes.h>
+#include <bits/wchar.h>
+
#undef NULL
#ifdef __cplusplus
#define NULL 0
@@ -24,15 +26,9 @@ extern "C" {
#define NULL ((void*)0)
#endif
-#undef WCHAR_MIN
-#undef WCHAR_MAX
-#define WCHAR_MIN (-1-0x7fffffff)
-#define WCHAR_MAX (0x7fffffff)
-
#undef WEOF
#define WEOF (-1)
-
typedef struct
{
unsigned __opaque1, __opaque2;