/* 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 #include "ckerrlog.h" #include "ckutil.h" #define COMPONENT "ckerrlog" static int loglvl; static char buf[STR_M]; #define X(stream) static char *stream; CK_STREAMS #undef X char * get_time() { time_t rawtime; struct tm * timeinfo; time (&rawtime); timeinfo = localtime (&rawtime); strftime (buf,80,"[%c]",timeinfo); return buf; } void initialize_errlog() { #define X(stream) stream = NULL; CK_STREAMS #undef X 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 ckhelp(char *txt, ...) { va_list args; va_start(args, txt); add_help_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); } void ckhelp_add_component(char *txt, ...) { va_list args; va_start(args, txt); add_help_with_delim(" ", txt, args); va_end(args); } void report_err() { printf("%s", err); free(err); err = NULL; } void report_help() { printf("%s", help); free(help); help = NULL; }