diff options
Diffstat (limited to 'common/message.c')
-rw-r--r-- | common/message.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/common/message.c b/common/message.c index 34e0d5b..ca087ea 100644 --- a/common/message.c +++ b/common/message.c @@ -104,7 +104,7 @@ p11_message_err (int errnum, char strerr[P11_MESSAGE_MAX]; va_list va; size_t length; -#ifdef HAVE_STRERROR_L +#if defined(HAVE_STRERROR_L) && defined(HAVE_USELOCALE) locale_t loc; #endif @@ -118,7 +118,12 @@ p11_message_err (int errnum, buffer[length] = 0; snprintf (strerr, sizeof (strerr), "Unknown error %d", errnum); -#ifdef HAVE_STRERROR_L + /* As strerror_r() is being deprecated in POSIX: + * http://austingroupbugs.net/view.php?id=655 + * we prefer to use strerror_l() with per-thread locale + * argument as a thread-safe variant of strerror(). + */ +#if defined(HAVE_STRERROR_L) && defined(HAVE_USELOCALE) loc = uselocale ((locale_t) 0); if (loc != NULL) strncpy (strerr, strerror_l (errnum, loc), sizeof (strerr)); |