forked from OSchip/llvm-project
Make locale code compile on CloudABI.
After r241454 landed, libc++'s locale code compiles on CloudABI, with the exception of the following two bits: - CloudABI doesn't have setlocale(), as the C library does not keep track of any global state. The global locale is always set to "C". Disable the call to setlocale() on this system. - Similarly, mbtowc_l() is also not present, as it is also not thread-safe. As CloudABI does not support state-dependent encodings, simply disable that part of the logic. The locale code now compiles out of the box on CloudABI. Differential Revision: http://reviews.llvm.org/D10729 Reviewed by: jroelofs llvm-svn: 241455
This commit is contained in:
parent
2a7ab629e5
commit
2a80cab90e
|
@ -575,8 +575,10 @@ locale::global(const locale& loc)
|
|||
locale& g = __global();
|
||||
locale r = g;
|
||||
g = loc;
|
||||
#ifndef __CloudABI__
|
||||
if (g.name() != "*")
|
||||
setlocale(LC_ALL, g.name().c_str());
|
||||
#endif
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -1707,22 +1709,23 @@ codecvt<wchar_t, char, mbstate_t>::do_unshift(state_type& st,
|
|||
int
|
||||
codecvt<wchar_t, char, mbstate_t>::do_encoding() const _NOEXCEPT
|
||||
{
|
||||
#ifndef __CloudABI__
|
||||
#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
|
||||
if (mbtowc_l(nullptr, nullptr, MB_LEN_MAX, __l) == 0)
|
||||
if (mbtowc_l(nullptr, nullptr, MB_LEN_MAX, __l) != 0)
|
||||
#else
|
||||
if (__mbtowc_l(nullptr, nullptr, MB_LEN_MAX, __l) == 0)
|
||||
if (__mbtowc_l(nullptr, nullptr, MB_LEN_MAX, __l) != 0)
|
||||
#endif
|
||||
{
|
||||
// stateless encoding
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
// stateless encoding
|
||||
#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
|
||||
if (__l == 0 || MB_CUR_MAX_L(__l) == 1) // there are no known constant length encodings
|
||||
if (__l == 0 || MB_CUR_MAX_L(__l) == 1) // there are no known constant length encodings
|
||||
#else
|
||||
if (__l == 0 || __mb_cur_max_l(__l) == 1) // there are no known constant length encodings
|
||||
if (__l == 0 || __mb_cur_max_l(__l) == 1) // there are no known constant length encodings
|
||||
#endif
|
||||
return 1; // which take more than 1 char to form a wchar_t
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
return 1; // which take more than 1 char to form a wchar_t
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
Loading…
Reference in New Issue