1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #ifndef __DBG_H__ #define __DBG_H__
#include "log.h" #include <errno.h> #include <stdio.h> #include <string.h>
#ifdef NDEBUG #define debug(M, ...) #else #define debug(M, ...) \ fprintf(stderr, ANSI_FMT("DEBUG %s:%d: " M "\n", ANSI_BG_BLACK), __FILE__, \ __LINE__, ##__VA_ARGS__) #endif
#define clean_errno() (errno == 0 ? "None" : strerror(errno))
#define log_err(M, ...) \ fprintf(stderr, \ ANSI_FMT("[ERROR] (%s:%d: errno: %s) " M "\n", ANSI_FG_RED), \ __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__)
#define log_warn(M, ...) \ fprintf(stderr, \ ANSI_FMT("[WARN] (%s:%d: errno: %s) " M "\n", ANSI_FG_YELLOW), \ __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__)
#define log_info(M, ...) \ fprintf(stderr, ANSI_FMT("[INFO] (%s:%d:) " M "\n", ANSI_FG_BLUE), \ __FILE__, __LINE__, ##__VA_ARGS__)
#define check(A, M, ...) \ if (!(A)) { \ log_err(M, ##__VA_ARGS__); \ errno = 0; \ goto error; \ }
#define sentinel(M, ...) \ { \ log_err(M, ##__VA_ARGS__); \ errno = 0; \ goto error; \ }
#define check_mem(A) check((A), "Out of memory.")
#define check_debug(A, M, ...) \ if (!(A)) { \ debug(M, ##__VA_ARGS__); \ errno = 0; \ goto error; \ }
#endif
|