char* errorx(const char* loc, const char* cmd, const char* cat, const char* msg) { char* s; if (!error_info.translate) error_info.translate = translate; /* 2007-03-19 OLD_Error_info_t workaround */ if (ERROR_translating()) { if (!loc) loc = (const char*)locales[AST_LC_MESSAGES]->code; if (!cmd) cmd = (const char*)error_info.id; if (!cat) cat = (const char*)error_info.catalog; if (s = (*error_info.translate)(loc, cmd, cat, msg)) return s; } return (char*)msg; }
char* _ast_strerror(int err) { char* msg; int z; #if _lib_strerror z = errno; msg = strerror(err); errno = z; #else if (err > 0 && err <= sys_nerr) msg = (char*)sys_errlist[err]; else msg = 0; #endif if (msg) { #if !_PACKAGE_astsa if (ERROR_translating()) { #if _lib_strerror static int sys; if (!sys) { char* s; char* t; char* p; #if _lib_strerror /* * stash the pending strerror() msg */ msg = strcpy(fmtbuf(strlen(msg) + 1), msg); #endif /* * make sure that strerror() translates */ if (!(s = strerror(1))) sys = -1; else { t = fmtbuf(z = strlen(s) + 1); strcpy(t, s); ast.locale.set |= AST_LC_internal; p = setlocale(LC_MESSAGES, NiL); setlocale(LC_MESSAGES, "C"); sys = (s = strerror(1)) && strcmp(s, t) ? 1 : -1; setlocale(LC_MESSAGES, p); ast.locale.set &= ~AST_LC_internal; } } if (sys > 0) return msg; #endif return ERROR_translate(NiL, NiL, "errlist", msg); } #endif return msg; } msg = fmtbuf(z = 32); sfsprintf(msg, z, ERROR_translate(NiL, NiL, "errlist", "Error %d"), err); return msg; }