aboutsummaryrefslogtreecommitdiff
path: root/src/log.h
diff options
context:
space:
mode:
authorlns <matzeton@googlemail.com>2018-04-11 14:28:18 +0200
committerToni Uhlig <matzeton@googlemail.com>2018-06-13 18:23:43 +0200
commitf2f11e477a489ac25a4c4be064eddc26fc9d677c (patch)
treed4f679146a61b28056e772e30570c53fb4721b80 /src/log.h
parentebabaa69c0a3ba992895c7a66729e81e0923d5f1 (diff)
POTD skeleton.
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'src/log.h')
-rw-r--r--src/log.h42
1 files changed, 34 insertions, 8 deletions
diff --git a/src/log.h b/src/log.h
index 3363395..00042f9 100644
--- a/src/log.h
+++ b/src/log.h
@@ -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