diff options
author | Ed Schouten <ed@nuxi.nl> | 2015-07-06 15:39:36 +0000 |
---|---|---|
committer | Ed Schouten <ed@nuxi.nl> | 2015-07-06 15:39:36 +0000 |
commit | 2a80cab90e103dce24ea65768176c88eddcd23f5 (patch) | |
tree | 9520060179304a47c2c21d5cef322f301eed8b97 /libcxx | |
parent | 2a7ab629e5d44ca69fa66b36549117ace5e9b063 (diff) | |
download | bcm5719-llvm-2a80cab90e103dce24ea65768176c88eddcd23f5.tar.gz bcm5719-llvm-2a80cab90e103dce24ea65768176c88eddcd23f5.zip |
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
Diffstat (limited to 'libcxx')
-rw-r--r-- | libcxx/src/locale.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/libcxx/src/locale.cpp b/libcxx/src/locale.cpp index ed383e40a9a..bdc73e1d537 100644 --- a/libcxx/src/locale.cpp +++ b/libcxx/src/locale.cpp @@ -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 |