[PATCH] Make locale code compile on CloudABI.
Ed Schouten
ed at nuxi.nl
Thu Jun 25 03:22:43 PDT 2015
Hi jroelofs, mclow.lists,
After D10690 lands, libc++'s locale code will compile 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.
After D10690 and this patch hit the tree, the locale code will compile out of the box on CloudABI.
REPOSITORY
rL LLVM
http://reviews.llvm.org/D10729
Files:
src/locale.cpp
Index: src/locale.cpp
===================================================================
--- src/locale.cpp
+++ src/locale.cpp
@@ -575,8 +575,10 @@
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 @@
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
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D10729.28444.patch
Type: text/x-patch
Size: 1520 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150625/b6e158a1/attachment.bin>
More information about the cfe-commits
mailing list