X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Flocale%2Fsetlocale.c;h=8ea389a3c118d570cbc3a0eb54d03ba52df39bf2;hb=6cb4f91db7a5dc3bca63037ddc5f998a08dc3fb0;hp=cbc0b5517f04dcd6ce20e721a3d0bc13ba7c9293;hpb=674e28af2deaa3ef2b71af18f7a18af22467d5ef;p=musl diff --git a/src/locale/setlocale.c b/src/locale/setlocale.c index cbc0b551..8ea389a3 100644 --- a/src/locale/setlocale.c +++ b/src/locale/setlocale.c @@ -9,6 +9,9 @@ static char buf[2+4*(LOCALE_NAME_MAX+1)]; char *setlocale(int cat, const char *name) { + struct __locale_map *lm; + int i, j; + if (!libc.global_locale.messages_name) { libc.global_locale.messages_name = buf + 2 + 3*(LOCALE_NAME_MAX+1); @@ -24,7 +27,6 @@ char *setlocale(int cat, const char *name) if (cat == LC_ALL) { if (name) { char part[LOCALE_NAME_MAX+1]; - int i, j; if (name[0] && name[1]==';' && strlen(name) > 2 + 3*(LOCALE_NAME_MAX+1)) { part[0] = name[0]; @@ -45,6 +47,11 @@ char *setlocale(int cat, const char *name) } memset(buf, ';', 2 + 3*(LOCALE_NAME_MAX+1)); buf[0] = libc.global_locale.ctype_utf8 ? 'U' : 'C'; + for (i=LC_TIME; iname, strlen(lm->name)); + } return buf; } @@ -58,10 +65,13 @@ char *setlocale(int cat, const char *name) switch (cat) { case LC_CTYPE: return libc.global_locale.ctype_utf8 ? "C.UTF-8" : "C"; + case LC_NUMERIC: + return "C"; case LC_MESSAGES: return libc.global_locale.messages_name[0] ? libc.global_locale.messages_name : "C"; default: - return "C"; + lm = libc.global_locale.cat[cat-2]; + return lm ? lm->name : "C"; } }