From bf3c1a9d8e4ace4c3a92b4af56e4b62657907522 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Fri, 9 Jun 2017 14:41:13 +0200 Subject: compat: Prefer strerror_l to strerror_r strerror_r is being obsolete in the next POSIX specification: http://austingroupbugs.net/view.php?id=655 --- common/message.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'common') diff --git a/common/message.c b/common/message.c index 35f2764..ccc310e 100644 --- a/common/message.c +++ b/common/message.c @@ -49,6 +49,10 @@ #include "message.h" #include +#include +#ifdef HAVE_LOCALE_H +#include +#endif #include #include #include @@ -100,6 +104,9 @@ p11_message_err (int errnum, char strerr[P11_MESSAGE_MAX]; va_list va; size_t length; +#ifdef HAVE_STRERROR_L + locale_t loc; +#endif va_start (va, msg); length = vsnprintf (buffer, P11_MESSAGE_MAX - 1, msg, va); @@ -110,8 +117,14 @@ p11_message_err (int errnum, length = P11_MESSAGE_MAX - 1; buffer[length] = 0; - strncpy (strerr, "Unknown error", sizeof (strerr)); + snprintf (strerr, sizeof (strerr), "Unknown error %d", errnum); +#ifdef HAVE_STRERROR_L + loc = uselocale ((locale_t) 0); + if (loc != NULL) + strncpy (strerr, strerror_l (errnum, loc), sizeof (strerr)); +#else strerror_r (errnum, strerr, sizeof (strerr)); +#endif strerr[P11_MESSAGE_MAX - 1] = 0; p11_message ("%s: %s", buffer, strerr); -- cgit v1.1