aboutsummaryrefslogtreecommitdiffstats
path: root/src/util.cpp
diff options
context:
space:
mode:
authorMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-07-03 11:01:28 +0200
committerMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-08-08 17:24:00 +0200
commitcb5568e11bbe2d499d4d43dc30a779a5869b12ea (patch)
treec19eba624790091bd425118f696f95ccafdf2ad0 /src/util.cpp
parent1f3e4103df53cc0d0946cd712165877bae8a2c2d (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.cpp65
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