summaryrefslogtreecommitdiff
path: root/src/msg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/msg.c')
-rw-r--r--src/msg.c78
1 files changed, 43 insertions, 35 deletions
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 <stdio.h>
#include <stdlib.h>
@@ -15,7 +16,10 @@
#include <openssl/err.h>
-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;
}