summaryrefslogtreecommitdiff
path: root/common/message.c
diff options
context:
space:
mode:
authorDaiki Ueno <dueno@redhat.com>2018-04-27 10:00:52 +0200
committerDaiki Ueno <ueno@gnu.org>2018-05-01 13:30:43 +0200
commita625dfa4f2456b1a866489e5be15fb46578237a5 (patch)
treed0959e03eeeec6d331aa0451fe6f9199f70eb4b3 /common/message.c
parent6202903b261dfae740af3f8e985244bab48470ba (diff)
library: Use dedicated locale object for printing error
Diffstat (limited to 'common/message.c')
-rw-r--r--common/message.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/common/message.c b/common/message.c
index 34e0d5b..e4e00d5 100644
--- a/common/message.c
+++ b/common/message.c
@@ -60,6 +60,10 @@
static bool print_messages = false;
+#ifdef HAVE_LOCALE_H
+locale_t p11_message_locale = (locale_t) 0;
+#endif
+
static char *
default_message_storage (void)
{
@@ -104,9 +108,6 @@ 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);
@@ -118,10 +119,9 @@ p11_message_err (int errnum,
buffer[length] = 0;
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));
+#if defined(HAVE_STRERROR_L) && defined(HAVE_NEWLOCALE)
+ if (p11_message_locale != (locale_t) 0)
+ strncpy (strerr, strerror_l (errnum, p11_message_locale), sizeof (strerr));
#else
strerror_r (errnum, strerr, sizeof (strerr));
#endif