summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2002-08-03 15:56:25 +0000
committerache <ache@FreeBSD.org>2002-08-03 15:56:25 +0000
commit3b6651b983ed2691da3bbc5b5c4cdc8cf4c65900 (patch)
tree3b99e81221c87ddddbf093ed75c369907f44c536 /lib
parent6f96abf099f562e4a52b2bea74f8b52fabaec68b (diff)
downloadFreeBSD-src-3b6651b983ed2691da3bbc5b5c4cdc8cf4c65900.zip
FreeBSD-src-3b6651b983ed2691da3bbc5b5c4cdc8cf4c65900.tar.gz
Preserve errno in fallback code
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/locale/setlocale.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/libc/locale/setlocale.c b/lib/libc/locale/setlocale.c
index 6b151ff..331ce60 100644
--- a/lib/libc/locale/setlocale.c
+++ b/lib/libc/locale/setlocale.c
@@ -239,6 +239,7 @@ loadlocale(category)
char *ret;
char *new = new_categories[category];
char *old = current_categories[category];
+ int saverr;
if ((new[0] == '.' &&
(new[1] == '\0' || (new[1] == '.' && new[2] == '\0'))) ||
@@ -273,8 +274,10 @@ loadlocale(category)
return (old); \
ret = FUNC(new) != 0 ? NULL : new; \
if (ret == NULL) { \
+ saverr = errno; \
if (FUNC(old) != 0 && FUNC("C") == 0) \
(void)strcpy(old, "C"); \
+ errno = saverr; \
} else \
(void)strcpy(old, new); \
return (ret); \
OpenPOWER on IntegriCloud