diff options
author | ache <ache@FreeBSD.org> | 2002-08-03 15:56:25 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 2002-08-03 15:56:25 +0000 |
commit | 3b6651b983ed2691da3bbc5b5c4cdc8cf4c65900 (patch) | |
tree | 3b99e81221c87ddddbf093ed75c369907f44c536 /lib/libc/locale | |
parent | 6f96abf099f562e4a52b2bea74f8b52fabaec68b (diff) | |
download | FreeBSD-src-3b6651b983ed2691da3bbc5b5c4cdc8cf4c65900.zip FreeBSD-src-3b6651b983ed2691da3bbc5b5c4cdc8cf4c65900.tar.gz |
Preserve errno in fallback code
Diffstat (limited to 'lib/libc/locale')
-rw-r--r-- | lib/libc/locale/setlocale.c | 3 |
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); \ |