diff options
author | Marcus Fritzsch <marcus_fritzsch@mentor.com> | 2017-07-03 11:01:28 +0200 |
---|---|---|
committer | Marcus Fritzsch <marcus_fritzsch@mentor.com> | 2017-08-08 17:24:00 +0200 |
commit | cb5568e11bbe2d499d4d43dc30a779a5869b12ea (patch) | |
tree | c19eba624790091bd425118f696f95ccafdf2ad0 /src/util.cpp | |
parent | 1f3e4103df53cc0d0946cd712165877bae8a2c2d (diff) |
util.h and its impl are now c++
Signed-off-by: Marcus Fritzsch <marcus_fritzsch@mentor.com>
Diffstat (limited to 'src/util.cpp')
-rw-r--r-- | src/util.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/util.cpp b/src/util.cpp new file mode 100644 index 0000000..1d0601a --- /dev/null +++ b/src/util.cpp @@ -0,0 +1,65 @@ +#include "util.hpp" + +#include <errno.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + +struct strftime_cache { + time_t time; + char buf[128]; +}; + +static void log_(char const *log_type, FILE *stream, char const *fmt, + va_list args) { + static struct strftime_cache strft; + + time_t t = time(NULL); + if (t != strft.time) { + strft.time = t; + struct tm tm; + struct tm *tmp = localtime_r(&t, &tm); + strftime(strft.buf, sizeof(strft.buf), "%Y-%m-%dT%H:%M:%S", tmp); + } + + fputs(program_invocation_short_name, stream); + fputs(" ", stream); + fputs(strft.buf, stream); + fputs(" ", stream); + fputs(log_type, stream); + fputs(" ", stream); + vfprintf(stream, fmt, args); + fputs("\n", stream); +} + +void lognotice(char const *fmt, ...) { + va_list a; + va_start(a, fmt); + log_("notice", stdout, fmt, a); + va_end(a); +} + +void logerror(char const *fmt, ...) { + va_list a; + va_start(a, fmt); + log_("error", stderr, fmt, a); + va_end(a); +} + +void fatal(char const *fmt, ...) { + va_list a; + va_start(a, fmt); + log_("fatal", stderr, fmt, a); + va_end(a); + abort(); +} + +#ifdef DEBUG_OUTPUT +void logdebug(char const *fmt, ...) { + va_list a; + va_start(a, fmt); + log_("debug", stdout, fmt, a); + va_end(a); +} +#endif |