diff options
-rw-r--r-- | src/errno/strerror.c | 13 | ||||
-rw-r--r-- | src/locale/langinfo.c | 1 | ||||
-rw-r--r-- | src/locale/strerror_l.c | 7 | ||||
-rw-r--r-- | src/network/gai_strerror.c | 4 | ||||
-rw-r--r-- | src/network/hstrerror.c | 4 | ||||
-rw-r--r-- | src/regex/regerror.c | 2 | ||||
-rw-r--r-- | src/string/strsignal.c | 5 |
7 files changed, 23 insertions, 13 deletions
diff --git a/src/errno/strerror.c b/src/errno/strerror.c index b5559cbe..24c94d37 100644 --- a/src/errno/strerror.c +++ b/src/errno/strerror.c @@ -1,5 +1,7 @@ #include <errno.h> #include <string.h> +#include "locale_impl.h" +#include "libc.h" #define E(a,b) ((unsigned char)a), static const unsigned char errid[] = { @@ -12,7 +14,7 @@ static const char errmsg[] = #include "__strerror.h" ; -char *strerror(int e) +char *__strerror_l(int e, locale_t loc) { const char *s; int i; @@ -24,5 +26,12 @@ char *strerror(int e) } for (i=0; errid[i] && errid[i] != e; i++); for (s=errmsg; i; s++, i--) for (; *s; s++); - return (char *)s; + return (char *)LCTRANS(s, LC_MESSAGES, loc); +} + +char *strerror(int e) +{ + return __strerror_l(e, CURRENT_LOCALE); } + +weak_alias(__strerror_l, strerror_l); diff --git a/src/locale/langinfo.c b/src/locale/langinfo.c index aa0e8de6..a1ada246 100644 --- a/src/locale/langinfo.c +++ b/src/locale/langinfo.c @@ -57,6 +57,7 @@ char *__nl_langinfo_l(nl_item item, locale_t loc) } for (; idx; idx--, str++) for (; *str; str++); + if (cat != LC_NUMERIC && *str) str = LCTRANS(str, cat, loc); return (char *)str; } diff --git a/src/locale/strerror_l.c b/src/locale/strerror_l.c deleted file mode 100644 index 765f5c69..00000000 --- a/src/locale/strerror_l.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <string.h> -#include <locale.h> - -char *strerror_l(int err, locale_t l) -{ - return strerror(err); -} diff --git a/src/network/gai_strerror.c b/src/network/gai_strerror.c index 0bf3e379..9596580e 100644 --- a/src/network/gai_strerror.c +++ b/src/network/gai_strerror.c @@ -1,4 +1,5 @@ #include <netdb.h> +#include "locale_impl.h" static const char msgs[] = "Invalid flags\0" @@ -19,5 +20,6 @@ const char *gai_strerror(int ecode) { const char *s; for (s=msgs, ecode++; ecode && *s; ecode++, s++) for (; *s; s++); - return *s ? s : s+1; + if (!*s) s++; + return LCTRANS_CUR(s); } diff --git a/src/network/hstrerror.c b/src/network/hstrerror.c index b7a6ab6c..a4d001c5 100644 --- a/src/network/hstrerror.c +++ b/src/network/hstrerror.c @@ -1,5 +1,6 @@ #define _GNU_SOURCE #include <netdb.h> +#include "locale_impl.h" static const char msgs[] = "Host not found\0" @@ -12,5 +13,6 @@ const char *hstrerror(int ecode) { const char *s; for (s=msgs, ecode--; ecode && *s; ecode--, s++) for (; *s; s++); - return *s ? s : s+1; + if (!*s) s++; + return LCTRANS_CUR(s); } diff --git a/src/regex/regerror.c b/src/regex/regerror.c index df4afa4f..5b347cc7 100644 --- a/src/regex/regerror.c +++ b/src/regex/regerror.c @@ -1,6 +1,7 @@ #include <string.h> #include <regex.h> #include <stdio.h> +#include "locale_impl.h" /* Error message strings for error codes listed in `regex.h'. This list needs to be in sync with the codes listed there, naturally. */ @@ -31,5 +32,6 @@ size_t regerror(int e, const regex_t *restrict preg, char *restrict buf, size_t const char *s; for (s=messages; e && *s; e--, s+=strlen(s)+1); if (!*s) s++; + s = LCTRANS_CUR(s); return 1+snprintf(buf, size, "%s", s); } diff --git a/src/string/strsignal.c b/src/string/strsignal.c index 905c0956..96bfe841 100644 --- a/src/string/strsignal.c +++ b/src/string/strsignal.c @@ -1,5 +1,6 @@ #include <signal.h> #include <string.h> +#include "locale_impl.h" #if (SIGHUP == 1) && (SIGINT == 2) && (SIGQUIT == 3) && (SIGILL == 4) \ && (SIGTRAP == 5) && (SIGABRT == 6) && (SIGBUS == 7) && (SIGFPE == 8) \ @@ -104,12 +105,12 @@ static const char strings[] = char *strsignal(int signum) { - char *s = (char *)strings; + const char *s = strings; signum = sigmap(signum); if (signum - 1U >= _NSIG-1) signum = 0; for (; signum--; s++) for (; *s; s++); - return s; + return (char *)LCTRANS_CUR(s); } |