static struct err_state err_no_mem = {
.err = {
.code = CDECL_ENOMEM,
- .str = "failed to allocate memory",
+ .str = NULL,
},
};
+const char *cdecl__strerror(unsigned code)
+{
+# include "errtab.h"
+
+ assert(code < sizeof offtab / sizeof offtab[0]);
+ assert(offtab[code] != 0);
+
+ return gettext((char *)&strtab + offtab[code]);
+}
+
static void free_err(void *err)
{
if (err == &err_no_mem)
static void initialize(void)
{
cdecl__init_i18n();
- err_no_mem.err.str = gettext(err_no_mem.err.str);
+ err_no_mem.err.str = cdecl__strerror(CDECL_ENOMEM);
gl_tls_key_init(tls_key, free_err);
memcpy(state->str, err->str, need_len);
state->err.str = state->str;
} else {
- state->err.str = "unknown error";
+ state->err.str = cdecl__strerror(state->err.code);
}
}