From c89aa97f95c48b7100effe0d9bab9ed83dc51cac Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Tue, 17 Mar 2015 22:44:09 +0100 Subject: [PATCH] added logging output via OpalPrint() --- server/include/utils.h | 9 +++++++ server/src/utils.c | 59 +++++++++++++++++++++++++++++++----------- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/server/include/utils.h b/server/include/utils.h index 8b5f72582..98bccc4f1 100644 --- a/server/include/utils.h +++ b/server/include/utils.h @@ -68,6 +68,15 @@ void epoch_reset(); */ void print(enum log_level lvl, const char *fmt, ...); +/** Safely append a format string to an existing string. + * + * This function is similar to strlcat() from BSD. + */ +int strap(char *dest, size_t size, const char *fmt, ...); + +/** Variable arguments (stdarg) version of strap() */ +int vstrap(char *dest, size_t size, const char *fmt, va_list va); + /** Convert integer to cpu_set_t. * * @param set A cpu bitmask diff --git a/server/src/utils.c b/server/src/utils.c index 7464ad8f1..998555099 100644 --- a/server/src/utils.c +++ b/server/src/utils.c @@ -15,6 +15,10 @@ #include #include +#ifdef ENABLE_OPAL_ASYNC +#include +#endif + #include "config.h" #include "cfg.h" #include "utils.h" @@ -35,35 +39,60 @@ void epoch_reset() clock_gettime(CLOCK_REALTIME, &epoch); } +int strap(char *dest, size_t size, const char *fmt, ...) +{ + int ret; + + va_list ap; + va_start(ap, fmt); + ret = vstrap(dest, size, fmt, ap); + va_end(ap); + + return ret; +} + +int vstrap(char *dest, size_t size, const char *fmt, va_list ap) +{ + int len = strlen(dest); + + return vsnprintf(dest + len, size - len, fmt, ap); +} + void print(enum log_level lvl, const char *fmt, ...) { struct timespec ts; + char buf[512] = ""; va_list ap; - va_start(ap, fmt); /* Timestamp */ clock_gettime(CLOCK_REALTIME, &ts); - fprintf(stderr, "%8.3f ", timespec_delta(&epoch, &ts)); + strap(buf, sizeof(buf), "%8.3f ", timespec_delta(&epoch, &ts)); + /* Severity */ switch (lvl) { - case DEBUG: fprintf(stderr, BLD("%-5s "), GRY("Debug")); break; - case INFO: fprintf(stderr, BLD("%-5s "), " " ); break; - case WARN: fprintf(stderr, BLD("%-5s "), YEL(" Warn")); break; - case ERROR: fprintf(stderr, BLD("%-5s "), RED("Error")); break; + case DEBUG: strap(buf, sizeof(buf), BLD("%-5s "), GRY("Debug")); break; + case INFO: strap(buf, sizeof(buf), BLD("%-5s "), " " ); break; + case WARN: strap(buf, sizeof(buf), BLD("%-5s "), YEL(" Warn")); break; + case ERROR: strap(buf, sizeof(buf), BLD("%-5s "), RED("Error")); break; } - if (_indent) { - for (int i = 0; i < _indent-1; i++) - fprintf(stderr, GFX("\x78") " "); - - fprintf(stderr, GFX("\x74") " "); - } - - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n"); + /* Indention */ + for (int i = 0; i < _indent-1; i++) + strap(buf, sizeof(buf), GFX("\x78") " "); + strap(buf, sizeof(buf), GFX("\x74") " "); + /* Format String */ + va_start(ap, fmt); + vstrap(buf, sizeof(buf), fmt, ap); va_end(ap); + + /* Output */ +#ifdef ENABLE_OPAL_ASYNC + OpalPrint("%s\n", buf); +#else + fprintf(stderr, "%s\n", buf); +#endif } cpu_set_t to_cpu_set(int set)