aboutsummaryrefslogtreecommitdiffstats
path: root/src/ckerrlog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ckerrlog.c')
-rw-r--r--src/ckerrlog.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/ckerrlog.c b/src/ckerrlog.c
new file mode 100644
index 0000000..1be1c08
--- /dev/null
+++ b/src/ckerrlog.c
@@ -0,0 +1,86 @@
+/* ckerrlog.c - Error report and logging for ck ------------------------*- C -*-
+ *
+ * This file is part of ck, the config keeper
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Copyright (C) 2018 Anastasis Grammenos
+ * GPLv3 (see LICENCE for the full notice)
+ *
+ * -------------------------------------------------------------------------- */
+#include <time.h>
+
+#include "ckerrlog.h"
+#include "ckutil.h"
+
+#define COMPONENT "ckerrlog"
+
+static char *err;
+static char *log;
+static int loglvl;
+static char buf[STR_M];
+
+char * get_time() {
+ time_t rawtime;
+ struct tm * timeinfo;
+ time (&rawtime);
+ timeinfo = localtime (&rawtime);
+ strftime (buf,80,"[%c]",timeinfo);
+ return buf;
+}
+
+void initialize_errlog() {
+ err = NULL;
+ log = NULL;
+ loglvl = 0;
+ cklog("%s Log session started", get_time());
+}
+
+void report_errlog() {
+ if (err)
+ printf("Errors:\n%s", err);
+ free(err);
+ if (log)
+ printf("Logs:\n%s", log);
+ free(log);
+}
+
+#define X(stream) \
+ void add_ ## stream ## _with_delim(char *delim, char *txt, \
+ va_list args) { \
+ char tmp[STR_L]; \
+ vsprintf(tmp, txt, args); \
+ if (stream) { \
+ stream = (char *)realloc(stream, strlen(stream) + \
+ strlen(tmp) + strlen(delim) + 1); \
+ strcat(stream, tmp); \
+ strcat(stream, delim); \
+ return; \
+ } \
+ stream = (char *)malloc(strlen(tmp) + strlen(delim) + 1); \
+ strcpy(stream, tmp); \
+ strcat(stream, delim); \
+ }
+CK_STREAMS
+#undef X
+
+void ckerr(char *txt, ...) {
+ va_list args;
+ va_start(args, txt);
+ add_err_with_delim("\n", txt, args);
+ va_end(args);
+}
+
+void cklog(char *txt, ...) {
+ va_list args;
+ va_start(args, txt);
+ add_log_with_delim("\n", txt, args);
+ va_end(args);
+}
+
+void ckerr_add_component(char *txt, ...) {
+ va_list args;
+ va_start(args, txt);
+ add_err_with_delim(" ", txt, args);
+ va_end(args);
+}