diff options
-rw-r--r-- | src/locale/setlocale.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/locale/setlocale.c b/src/locale/setlocale.c index 8dae5a4..623660c 100644 --- a/src/locale/setlocale.c +++ b/src/locale/setlocale.c @@ -48,10 +48,13 @@ char *setlocale(int cat, const char *name) } } char *s = buf; + const char *part; + int same = 0; for (i=0; i<LC_ALL; i++) { const struct __locale_map *lm = libc.global_locale.cat[i]; - const char *part = lm ? lm->name : "C"; + if (lm == libc.global_locale.cat[0]) same++; + part = lm ? lm->name : "C"; size_t l = strlen(part); memcpy(s, part, l); s[l] = ';'; @@ -59,7 +62,7 @@ char *setlocale(int cat, const char *name) } *--s = 0; UNLOCK(lock); - return buf; + return same==LC_ALL ? (char *)part : buf; } char *ret = setlocale_one_unlocked(cat, name); |