LibC: Define locale_t as an poiter
A lot of ports seem to depend on this casting nullptr into locale_t
This commit is contained in:
@@ -45,19 +45,19 @@ size_t wcrtomb(char* __restrict s, wchar_t ws, mbstate_t* __restrict ps)
|
||||
if (s == nullptr)
|
||||
return 1;
|
||||
|
||||
switch (__getlocale(LC_CTYPE))
|
||||
switch (__getlocale(LC_CTYPE)->encoding)
|
||||
{
|
||||
case locale_t::LOCALE_INVALID:
|
||||
ASSERT_NOT_REACHED();
|
||||
case locale_t::LOCALE_POSIX:
|
||||
case __ENC_ASCII:
|
||||
if (ws > 0x7F)
|
||||
break;
|
||||
*s = ws;
|
||||
return 1;
|
||||
case locale_t::LOCALE_UTF8:
|
||||
case __ENC_UTF8:
|
||||
if (!BAN::UTF8::from_codepoints(&ws, 1, s))
|
||||
break;
|
||||
return BAN::UTF8::byte_length(s[0]);
|
||||
default:
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
errno = EILSEQ;
|
||||
@@ -74,17 +74,17 @@ size_t mbrtowc(wchar_t* __restrict pwc, const char* __restrict s, size_t n, mbst
|
||||
const auto locale = __getlocale(LC_CTYPE);
|
||||
|
||||
size_t bytes = -1;
|
||||
switch (locale)
|
||||
switch (locale->encoding)
|
||||
{
|
||||
case locale_t::LOCALE_INVALID:
|
||||
ASSERT_NOT_REACHED();
|
||||
case locale_t::LOCALE_POSIX:
|
||||
case __ENC_ASCII:
|
||||
bytes = 1;
|
||||
break;
|
||||
case locale_t::LOCALE_UTF8:
|
||||
case __ENC_UTF8:
|
||||
if (auto b = BAN::UTF8::byte_length(s[0]); b != BAN::UTF8::invalid)
|
||||
bytes = b;
|
||||
break;
|
||||
default:
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
if (bytes == static_cast<size_t>(-1))
|
||||
@@ -97,17 +97,17 @@ size_t mbrtowc(wchar_t* __restrict pwc, const char* __restrict s, size_t n, mbst
|
||||
return -1;
|
||||
|
||||
wchar_t codepoint = WEOF;
|
||||
switch (locale)
|
||||
switch (locale->encoding)
|
||||
{
|
||||
case locale_t::LOCALE_INVALID:
|
||||
ASSERT_NOT_REACHED();
|
||||
case locale_t::LOCALE_POSIX:
|
||||
case __ENC_ASCII:
|
||||
codepoint = s[0];
|
||||
break;
|
||||
case locale_t::LOCALE_UTF8:
|
||||
case __ENC_UTF8:
|
||||
if (auto cp = BAN::UTF8::to_codepoint(s); cp != BAN::UTF8::invalid)
|
||||
codepoint = cp;
|
||||
break;
|
||||
default:
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
if (codepoint == WEOF)
|
||||
|
||||
Reference in New Issue
Block a user