ccm/lib/err.c

44 lines
795 B
C
Raw Normal View History

2024-03-18 17:20:40 +00:00
#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; i<self->logs.size; i++)
{
err_log_t const* log = self->logs.data[i];
fprintf(stderr, "[ERR:%d] %s\n", log->line, log->msg);
}
}