#include "err.h" void err_init(err_t* self) { assert(self); vec_init(&self->logs); } void err_free(err_t* self) { assert(self); vec_free_elements(&self->logs, NULL); vec_free(&self->logs); } int err_is_ok(err_t* self) { return self->logs.size == 0; } void err_push(err_t* self, int line, char const* format, ...) { va_list lst; va_start(lst, format); err_log_t* log = malloc(sizeof(err_log_t)); log->line = line; vsnprintf(log->msg, CCM_STRLEN, format, lst); va_end(lst); vec_push(&self->logs, log); } void err_print_stack_trace(err_t* self) { assert(self); for (size_t i=0; ilogs.size; i++) { err_log_t const* log = self->logs.data[i]; fprintf(stderr, "[ERR:%d] %s\n", log->line, log->msg); } }