44 lines
795 B
C
44 lines
795 B
C
#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);
|
|
}
|
|
}
|