X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Flocale%2Flocale_map.c;h=2321bac0ea97c7ef695282429cba544d07194fcb;hb=e4235d70672d9751d7718ddc2b52d0b426430768;hp=30aa7fcc3d9595285d05ae37c795243882bddcf4;hpb=11858d31aa020df3e7e7dedf49f9870ce12f31cc;p=musl diff --git a/src/locale/locale_map.c b/src/locale/locale_map.c index 30aa7fcc..2321bac0 100644 --- a/src/locale/locale_map.c +++ b/src/locale/locale_map.c @@ -1,8 +1,9 @@ #include #include +#include #include "locale_impl.h" #include "libc.h" -#include "atomic.h" +#include "lock.h" const char *__lctrans_impl(const char *msg, const struct __locale_map *lm) { @@ -11,10 +12,6 @@ const char *__lctrans_impl(const char *msg, const struct __locale_map *lm) return trans ? trans : msg; } -const unsigned char *__map_file(const char *, size_t *); -int __munmap(void *, size_t); -char *__strchrnul(const char *, int); - static const char envvars[][12] = { "LC_CTYPE", "LC_NUMERIC", @@ -24,17 +21,9 @@ static const char envvars[][12] = { "LC_MESSAGES", }; -static const uint32_t empty_mo[] = { 0x950412de, 0, -1, -1, -1 }; - -static const struct __locale_map c_dot_utf8 = { - .map = empty_mo, - .map_size = sizeof empty_mo, - .name = "C.UTF-8" -}; - const struct __locale_map *__get_locale(int cat, const char *val) { - static int lock[2]; + static volatile int lock[1]; static void *volatile loc_head; const struct __locale_map *p; struct __locale_map *new = 0; @@ -58,7 +47,7 @@ const struct __locale_map *__get_locale(int cat, const char *val) if (builtin) { if (cat == LC_CTYPE && val[1]=='.') - return (void *)&c_dot_utf8; + return (void *)&__c_dot_utf8; return 0; } @@ -107,8 +96,8 @@ const struct __locale_map *__get_locale(int cat, const char *val) * sake of being able to do message translations at the * application level. */ if (!new && (new = malloc(sizeof *new))) { - new->map = empty_mo; - new->map_size = sizeof empty_mo; + new->map = __c_dot_utf8.map; + new->map_size = __c_dot_utf8.map_size; memcpy(new->name, val, n); new->name[n] = 0; new->next = loc_head; @@ -117,7 +106,7 @@ const struct __locale_map *__get_locale(int cat, const char *val) /* For LC_CTYPE, never return a null pointer unless the * requested name was "C" or "POSIX". */ - if (!new && cat == LC_CTYPE) new = (void *)&c_dot_utf8; + if (!new && cat == LC_CTYPE) new = (void *)&__c_dot_utf8; UNLOCK(lock); return new;