diff options
author | lns <matzeton@googlemail.com> | 2018-04-11 14:28:18 +0200 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2018-06-13 18:23:43 +0200 |
commit | f2f11e477a489ac25a4c4be064eddc26fc9d677c (patch) | |
tree | d4f679146a61b28056e772e30570c53fb4721b80 /src/log.h | |
parent | ebabaa69c0a3ba992895c7a66729e81e0923d5f1 (diff) |
POTD skeleton.
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'src/log.h')
-rw-r--r-- | src/log.h | 42 |
1 files changed, 34 insertions, 8 deletions
@@ -5,11 +5,12 @@ #include <string.h> #include <errno.h> -#define LOGMSG_MAXLEN 255 -#define LOG_SET_FUNCS(open_cb, close_cb, fmt_cb, fmtex_cb) \ +#define LOGMSG_MAXLEN BUFSIZ +#define LOG_SET_FUNCS(open_cb, close_cb, fmt_cb, fmtex_cb, fmtexerr_cb) \ { \ log_open = open_cb; log_close = close_cb; \ log_fmt = fmt_cb; log_fmtex = fmtex_cb; \ + log_fmtexerr = fmtexerr_cb; \ } #define LOG_SET_FUNCS_VA(...) LOG_SET_FUNCS(__VA_ARGS__) #define D(fmt, ...) log_fmt(DEBUG, fmt, __VA_ARGS__) @@ -20,25 +21,50 @@ #define N2(fmt, ...) log_fmtex(NOTICE, __FILE__, __LINE__, fmt, __VA_ARGS__) #define W2(fmt, ...) log_fmtex(WARNING, __FILE__, __LINE__, fmt, __VA_ARGS__) #define E2(fmt, ...) log_fmtex(ERROR, __FILE__, __LINE__, fmt, __VA_ARGS__) -#define W_STRERR(msg) { if (errno) W2("%s failed: %s", msg, strerror(errno)); } -#define E_STRERR(msg) { if (errno) E2("%s failed: %s", msg, strerror(errno)); } +#define W_STRERR(fmt, ...) log_fmtexerr(WARNING, __FILE__, __LINE__, fmt, \ + __VA_ARGS__) +#define E_STRERR(fmt, ...) log_fmtexerr(ERROR, __FILE__, __LINE__, fmt, \ + __VA_ARGS__) +#define E_GAIERR(ret, msg) { if (ret) { E2("%s failed: %s", msg, gai_strerror(ret)); } } +#define FATAL(fmt, ...) { E_STRERR(fmt, __VA_ARGS__); abort(); } #define ABORT_ON_FATAL(expr, msg) \ - { errno = 0; if (expr) { E_STRERR(msg); abort(); } } + { errno = 0; long rv = (long) expr; \ + if (rv) { \ + /* \ + E_STRERR("`%s` returned %ld. %s", \ + #expr, rv, msg); abort(); \ + */ \ + E_STRERR("%s", msg); \ + kill(0, SIGABRT); \ + abort(); \ + } \ + } +#define C(fmt, ...) log_fmt(CMD, fmt, __VA_ARGS__) typedef enum log_priority { - DEBUG = 0, NOTICE, WARNING, ERROR + DEBUG = 0, NOTICE, WARNING, ERROR, CMD } log_priority; typedef int (*log_open_cb) (void); typedef void (*log_close_cb) (void); -typedef void (*log_fmt_cb) (log_priority prio, const char *fmt, ...); + +typedef void (*log_fmt_cb) (log_priority prio, const char *fmt, ...) + __attribute__ ((format (printf, 2, 3))); + typedef void (*log_fmtex_cb) (log_priority prio, const char *srcfile, - size_t line, const char *fmt, ...); + size_t line, const char *fmt, ...) + __attribute__ ((format (printf, 4, 5))); + +typedef void (*log_fmtexerr_cb) (log_priority prio, const char *srcfile, + size_t line, const char *fmt, ...) + __attribute__ ((format (printf, 4, 5))); +extern log_priority log_prio; extern log_open_cb log_open; extern log_close_cb log_close; extern log_fmt_cb log_fmt; extern log_fmtex_cb log_fmtex; +extern log_fmtexerr_cb log_fmtexerr; #endif |