mirror of
https://git.musl-libc.org/git/musl
synced 2025-03-18 00:23:16 +03:00
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.
This commit is contained in:
parent
089aeb08a0
commit
224c7a376a
@ -22,12 +22,8 @@ TYPEDEF long ptrdiff_t;
|
||||
|
||||
TYPEDEF __builtin_va_list va_list;
|
||||
|
||||
#ifdef __WCHAR_TYPE__
|
||||
TYPEDEF __WCHAR_TYPE__ wchar_t;
|
||||
#else
|
||||
TYPEDEF long wchar_t;
|
||||
#endif
|
||||
TYPEDEF long wint_t;
|
||||
TYPEDEF unsigned wchar_t;
|
||||
TYPEDEF int wint_t;
|
||||
TYPEDEF long wctrans_t;
|
||||
TYPEDEF long wctype_t;
|
||||
|
||||
|
4
arch/arm/bits/wchar.h
Normal file
4
arch/arm/bits/wchar.h
Normal file
@ -0,0 +1,4 @@
|
||||
#ifndef WCHAR_MIN
|
||||
#define WCHAR_MIN 0U
|
||||
#define WCHAR_MAX 0xffffffffU
|
||||
#endif
|
4
arch/i386/bits/wchar.h
Normal file
4
arch/i386/bits/wchar.h
Normal file
@ -0,0 +1,4 @@
|
||||
#ifndef WCHAR_MIN
|
||||
#define WCHAR_MIN (-1-0x7fffffff)
|
||||
#define WCHAR_MAX (0x7fffffff)
|
||||
#endif
|
4
arch/x86_64/bits/wchar.h
Normal file
4
arch/x86_64/bits/wchar.h
Normal file
@ -0,0 +1,4 @@
|
||||
#ifndef WCHAR_MIN
|
||||
#define WCHAR_MIN (-1-0x7fffffff)
|
||||
#define WCHAR_MAX (0x7fffffff)
|
||||
#endif
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user