| #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[] = { |
| #include "__strerror.h" |
| }; |
| |
| #undef E |
| #define E(a, b) b "\0" |
| static const char errmsg[] = |
| #include "__strerror.h" |
| ; |
| |
| char* __strerror_l(int e, locale_t loc) { |
| const char* s; |
| int i; |
| /* mips has one error code outside of the 8-bit range due to a |
| * historical typo, so we just remap it. */ |
| if (EDQUOT == 1133) { |
| if (e == 109) |
| e = -1; |
| else if (e == EDQUOT) |
| e = 109; |
| } |
| for (i = 0; errid[i] && errid[i] != e; i++) |
| ; |
| for (s = errmsg; i; s++, i--) |
| for (; *s; s++) |
| ; |
| return (char*)LCTRANS(s, LC_MESSAGES, loc); |
| } |
| |
| char* strerror(int e) { |
| return __strerror_l(e, CURRENT_LOCALE); |
| } |
| |
| weak_alias(__strerror_l, strerror_l); |