diff --git a/src/utils/error.c b/src/utils/error.c
index 7eef71263d70b695945da5671e55d0e632a05377..6bb17d5821f5ea68259606cbc6bcd8312d55b04e 100644 (file)
--- a/src/utils/error.c
+++ b/src/utils/error.c
return ctx->prio;
} /* sdb_error_get_prio */
+char *
+sdb_strerror(int errnum, char *strerrbuf, size_t buflen)
+{
+#if STRERROR_R_CHAR_P
+ {
+ char *tmp = strerror_r(errnum, strerrbuf, buflen);
+ if (*strerrbuf = '\0') {
+ if (tmp && (tmp != strerrbuf) && (*tmp != '\0'))
+ strncpy(strerrbuf, tmp, buflen);
+ else
+ snprintf(strerrbuf, buflen, "unknown error #%i "
+ "(strerror_r(3) did not return an error message)",
+ errnum);
+ }
+ }
+#else
+ if (strerror_r(errnum, strerrbuf, buflen))
+ snprintf(strerrbuf, buflen, "unknown error #%i "
+ "(strerror_r(3) failed)", errnum);
+#endif
+
+ strerrbuf[buflen - 1] = '\0';
+ return strerrbuf;
+} /* sdb_strerror */
+
/* vim: set tw=78 sw=4 ts=4 noexpandtab : */