diff options
author | Daiki Ueno <dueno@redhat.com> | 2017-06-12 11:09:43 +0200 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2017-06-12 11:30:42 +0200 |
commit | efe6dc56c3951c301dda1b548d4cbcd02e074462 (patch) | |
tree | 95bf26274ba4208b8d6e7af600ebffa104660387 /common/debug.c | |
parent | bf3c1a9d8e4ace4c3a92b4af56e4b62657907522 (diff) |
debug: Add p11_debug_err to prevent use of strerror
Diffstat (limited to 'common/debug.c')
-rw-r--r-- | common/debug.c | 35 |
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, ...) { |