#ifndef __GARGOYLE_DELUSION_H_ #define __GARGOYLE_DELUSION_H_ #include #define GARGOYLE_MAX_ERR_SZ 256 #define GARGOYLE_MAX_FUNC_SZ 33 struct gargoyle_err { gargoyle_err_type code; int errno_code; char func[GARGOYLE_MAX_FUNC_SZ]; char errno_func[GARGOYLE_MAX_FUNC_SZ]; char msg[GARGOYLE_MAX_ERR_SZ]; }; void gargoyle_emit_err(struct gargoyle_err *err); void gargoyle_fill_err(struct gargoyle_err *err, gargoyle_err_type code, int errno_code, const char *func, const char *errno_func, const char *fmt, ...); #define GARGOYLE_MK_ERR(err, code, fmt, ...) gargoyle_fill_err(err, code, 0, __func__, NULL, fmt, __VA_ARGS__) #define GARGOYLE_NEW_ERR(err) gargoyle_fill_err(err, 0, 0, __func__, NULL, "") #define GARGOYLE_SYS_ERR(err, code, errno_code, errno_func, fmt, ...) gargoyle_fill_err(err, code, errno_code, __func__, errno_func, fmt, __VA_ARGS__) #endif