diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 13:54:38 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 13:54:38 +0000 |
commit | 8c1ab65c0f548d20b7f177bdb736daaf603340e1 (patch) | |
tree | df55b7e75bf43f2bf500845b105afe3ac3a5157e /libc-top-half/musl/src/errno/strerror.c | |
parent | Initial commit. (diff) | |
download | wasi-libc-8c1ab65c0f548d20b7f177bdb736daaf603340e1.tar.xz wasi-libc-8c1ab65c0f548d20b7f177bdb736daaf603340e1.zip |
Adding upstream version 0.0~git20221206.8b7148f.upstream/0.0_git20221206.8b7148f
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'libc-top-half/musl/src/errno/strerror.c')
-rw-r--r-- | libc-top-half/musl/src/errno/strerror.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/libc-top-half/musl/src/errno/strerror.c b/libc-top-half/musl/src/errno/strerror.c new file mode 100644 index 0000000..7f92643 --- /dev/null +++ b/libc-top-half/musl/src/errno/strerror.c @@ -0,0 +1,47 @@ +#include <errno.h> +#include <stddef.h> +#include <string.h> +#include "locale_impl.h" + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ +#if EDQUOT==1133 +#define EDQUOT_ORIG 1133 +#undef EDQUOT +#define EDQUOT 109 +#endif + +static const struct errmsgstr_t { +#define E(n, s) char str##n[sizeof(s)]; +#include "__strerror.h" +#undef E +} errmsgstr = { +#define E(n, s) s, +#include "__strerror.h" +#undef E +}; + +static const unsigned short errmsgidx[] = { +#define E(n, s) [n] = offsetof(struct errmsgstr_t, str##n), +#include "__strerror.h" +#undef E +}; + +char *__strerror_l(int e, locale_t loc) +{ + const char *s; +#ifdef EDQUOT_ORIG + if (e==EDQUOT) e=0; + else if (e==EDQUOT_ORIG) e=EDQUOT; +#endif + if (e >= sizeof errmsgidx / sizeof *errmsgidx) e = 0; + s = (char *)&errmsgstr + errmsgidx[e]; + return (char *)LCTRANS(s, LC_MESSAGES, loc); +} + +char *strerror(int e) +{ + return __strerror_l(e, CURRENT_LOCALE); +} + +weak_alias(__strerror_l, strerror_l); |