summaryrefslogtreecommitdiff
path: root/common/debug.c
diff options
context:
space:
mode:
authorDaiki Ueno <dueno@redhat.com>2017-06-12 11:09:43 +0200
committerDaiki Ueno <ueno@gnu.org>2017-06-12 11:30:42 +0200
commitefe6dc56c3951c301dda1b548d4cbcd02e074462 (patch)
tree95bf26274ba4208b8d6e7af600ebffa104660387 /common/debug.c
parentbf3c1a9d8e4ace4c3a92b4af56e4b62657907522 (diff)
debug: Add p11_debug_err to prevent use of strerror
Diffstat (limited to 'common/debug.c')
-rw-r--r--common/debug.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/common/debug.c b/common/debug.c
index 47933fa..5f7546e 100644
--- a/common/debug.c
+++ b/common/debug.c
@@ -40,12 +40,17 @@
#include "debug.h"
#include <assert.h>
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#define P11_DEBUG_MESSAGE_MAX 512
+
struct DebugKey {
const char *name;
int value;
@@ -140,6 +145,36 @@ p11_debug_message (int flag,
}
void
+p11_debug_message_err (int flag,
+ int errnum,
+ const char *format, ...)
+{
+ va_list args;
+ char strerr[P11_DEBUG_MESSAGE_MAX];
+#ifdef HAVE_STRERROR_L
+ locale_t loc;
+#endif
+
+ if (flag & p11_debug_current_flags) {
+ fprintf (stderr, "(p11-kit:%d) ", getpid());
+ va_start (args, format);
+ vfprintf (stderr, format, args);
+ va_end (args);
+
+ 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_DEBUG_MESSAGE_MAX - 1] = 0;
+ fprintf (stderr, ": %s\n", strerr);
+ }
+}
+
+void
p11_debug_precond (const char *format,
...)
{