From 363a869b000ee1c9337bc0086108f6a5960da326 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Sun, 15 Nov 2009 20:26:16 +0000 Subject: Allow use of p11-tests as a library. --- src/msg.c | 78 +++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 35 deletions(-) (limited to 'src/msg.c') diff --git a/src/msg.c b/src/msg.c index be2fdcd..a0a4d6f 100644 --- a/src/msg.c +++ b/src/msg.c @@ -1,5 +1,6 @@ #include "p11-tests.h" +#include "p11-tests-lib.h" #include #include @@ -15,7 +16,10 @@ #include -static const char *the_prefix = NULL; +/* Where we log to */ +P11TestsLogFunc p11t_log_func = NULL; + +static const char *the_prefix = ""; const char* p11t_msg_rv(CK_RV rv) @@ -157,59 +161,63 @@ p11t_msg_openssl(void) return ERR_error_string(ERR_get_error(), NULL); } -void -p11t_msg_va(const char *message, va_list va) +static void +default_log_func (int level, const char *section, const char *message) { - size_t len; - - if(the_prefix) - fprintf(stdout, "%s: ", the_prefix); - vfprintf(stdout, message, va); - len = strlen(message); - if(len && message[len - 1] != '\n') - fputc('\n', stdout); - fflush(stdout); -} + const char *code; + + switch (level) { + case P11_TESTS_NONE: + code = NULL; + break; + case P11_TESTS_INFO: + code = "INFO"; + break; + case P11_TESTS_WARN: + code = "WARN"; + break; + case P11_TESTS_FAIL: + code = "FAIL"; + break; + default: + assert (0 && "should not be reached"); + } -void -p11t_msg_code(const char *code, const char *message, va_list va) -{ - size_t len; - - fprintf(stdout, "%s: ", code); - if(the_prefix) - fprintf(stdout, "%s: ", the_prefix); - vfprintf(stdout, message, va); - len = strlen(message); - if(len && message[len - 1] != '\n') - fputc('\n', stdout); + if (code) + fprintf (stdout, "%s: ", code); + if (section && section[0]) + fprintf (stdout, "%s: ", section); + fprintf (stdout, "%s\n", message); fflush(stdout); } - void -p11t_msg_print(const char *message, ...) +p11t_msg_va (int level, const char *message, va_list va) { - va_list va; - va_start(va, message); - p11t_msg_va(message, va); - va_end(va); + char buffer[4096]; + + vsnprintf (buffer, sizeof (buffer), message, va); + if (p11t_log_func) + p11t_log_func (level, the_prefix, buffer); + else + default_log_func (level, the_prefix, buffer); } void -p11t_msg_fatal(const char *message, ...) +p11t_msg_print (const char *message, ...) { va_list va; va_start(va, message); - p11t_msg_va(message, va); + p11t_msg_va (P11_TESTS_NONE, message, va); va_end(va); - exit(1); } const char* -p11t_msg_prefix(const char *prefix) +p11t_msg_prefix (const char *prefix) { const char *old = the_prefix; + if (prefix == NULL) + prefix = ""; the_prefix = prefix; return old; } -- cgit v1.2.3