Fixed segfault caused by bad printf.
[aftubes.git] / errors.c
blob54dfae9fa0994ede04d313d01ac1fa11d7b9e6eb
1 #define _GNU_SOURCE
2 #include "errors.h"
3 #include "stdarg.h"
4 #include "stdio.h"
6 static __thread struct {
7 err_t errno;
8 const char *file;
9 const char *func;
10 int line;
11 char *msg;
12 void *object;
13 } errinfo = {0, NULL, NULL, 0, NULL, NULL};
15 err_t make_error_internal(err_t n, void *obj, const char *file, const char *func, int line, const char *fmt, ...)
17 va_list ap;
18 va_start(ap, fmt);
19 vasprintf(&errinfo.msg, fmt, ap);
20 va_end(ap);
21 errinfo.errno = n;
22 errinfo.file = file;
23 errinfo.func = func;
24 errinfo.line = line;
25 errinfo.object = obj;
26 return n;
29 err_t get_last_error(void)
31 return errinfo.errno;
34 const char *get_last_error_file(void)
36 return errinfo.file;
39 const char *get_last_error_func(void)
41 return errinfo.func;
44 int get_last_error_line(void)
46 return errinfo.line;
49 const char *get_last_error_message(void)
51 return errinfo.msg;