48 lines
766 B
C
48 lines
766 B
C
|
#include "err.h"
|
||
|
|
||
|
void err_init(err_t* err)
|
||
|
{
|
||
|
assert(err);
|
||
|
err->size = 0;
|
||
|
}
|
||
|
|
||
|
void err_free(err_t* err)
|
||
|
{
|
||
|
assert(err);
|
||
|
|
||
|
for (size_t i=0; i<err->size; i++)
|
||
|
{
|
||
|
free(err->errors[i]->what);
|
||
|
free(err->errors[i]);
|
||
|
}
|
||
|
|
||
|
err->size = 0;
|
||
|
}
|
||
|
|
||
|
void err_error(err_t* err, char* what, int line)
|
||
|
{
|
||
|
assert(err);
|
||
|
assert(err->size + 1 < RZ_ERROR_STACK_SIZE);
|
||
|
|
||
|
err->errors[err->size] = malloc(sizeof(err_msg_t));
|
||
|
err->errors[err->size]->what = strdup(what);
|
||
|
err->errors[err->size]->line = line;
|
||
|
err->size++;
|
||
|
}
|
||
|
|
||
|
void err_abort(err_t* err)
|
||
|
{
|
||
|
assert(err);
|
||
|
|
||
|
for (size_t i=0; i<err->size; i++)
|
||
|
{
|
||
|
fprintf(stderr, "ERR(%d) %s\n",
|
||
|
err->errors[i]->line,
|
||
|
err->errors[i]->what);
|
||
|
}
|
||
|
|
||
|
err_free(err);
|
||
|
|
||
|
abort();
|
||
|
}
|