about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/locale/setlocale.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/locale/setlocale.c b/src/locale/setlocale.c
index 8dae5a4e..623660cc 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);