diff options
author | Rich Felker <dalias@aerifal.cx> | 2011-09-19 17:39:51 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2011-09-19 17:39:51 -0400 |
commit | 224c7a376acbc2feda12169b806e9845c828595e (patch) | |
tree | 69a72217cdf67552ffd69f5fbbfb4a5cf4db91c8 /include | |
parent | 089aeb08a083d798b59fc84cbff9383f304b1b8f (diff) | |
download | musl-224c7a376acbc2feda12169b806e9845c828595e.tar.gz musl-224c7a376acbc2feda12169b806e9845c828595e.tar.bz2 musl-224c7a376acbc2feda12169b806e9845c828595e.tar.xz musl-224c7a376acbc2feda12169b806e9845c828595e.zip |
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.h | 13 | ||||
-rw-r--r-- | include/wchar.h | 8 |
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; |