diff options
Diffstat (limited to 'src/message.h')
-rw-r--r-- | src/message.h | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/src/message.h b/src/message.h index 6bd73c7..aec5be8 100644 --- a/src/message.h +++ b/src/message.h @@ -7,23 +7,47 @@ /* message print. printed messages are passed to application via msg_fd */ void mprint_set_severity(int severity); -void mprint(int fd, int severity, const char *fmt, ...); +int mprint_get_severity(); + +#define mprint(fp, severity, fmt, ...) \ + do { \ + if (fp && severity <= mprint_get_severity()) { \ + fprintf(fp, fmt, ##__VA_ARGS__); \ + fflush(fp); \ + } \ + } while (0) + +#define mpr_err(fp, fmt, ...) \ + mprint(fp, MSCP_SEVERITY_ERR, fmt, ##__VA_ARGS__) +#define mpr_warn(fp, fmt, ...) \ + mprint(fp, MSCP_SEVERITY_WARN, fmt, ##__VA_ARGS__) +#define mpr_notice(fp, fmt, ...) \ + mprint(fp, MSCP_SEVERITY_NOTICE, fmt, ##__VA_ARGS__) +#define mpr_info(fp, fmt, ...) \ + mprint(fp, MSCP_SEVERITY_INFO, fmt, ##__VA_ARGS__) +#define mpr_debug(fp, fmt, ...) \ + mprint(fp, MSCP_SEVERITY_DEBUG, fmt, ##__VA_ARGS__) + + +/* errorno wrapper */ +extern __thread char thread_strerror[128]; + +#ifdef _GNU_SOURCE +/* GNU strerror_r */ +#define strerrno() \ + strerror_r(errno, thread_strerror, sizeof(thread_strerror)) +#else +/* this macro assumes that strerror_r never fails. any good way? */ +#define strerrno() \ + (strerror_r(errno, thread_strerror, sizeof(thread_strerror)) \ + ? thread_strerror : thread_strerror) +#endif -#define mpr_err(fd, fmt, ...) \ - mprint(fd, MSCP_SEVERITY_ERR, fmt, ##__VA_ARGS__) -#define mpr_warn(fd, fmt, ...) \ - mprint(fd, MSCP_SEVERITY_WARN, fmt, ##__VA_ARGS__) -#define mpr_notice(fd, fmt, ...) \ - mprint(fd, MSCP_SEVERITY_NOTICE, fmt, ##__VA_ARGS__) -#define mpr_info(fd, fmt, ...) \ - mprint(fd, MSCP_SEVERITY_INFO, fmt, ##__VA_ARGS__) -#define mpr_debug(fd, fmt, ...) \ - mprint(fd, MSCP_SEVERITY_DEBUG, fmt, ##__VA_ARGS__) /* error message buffer */ #define mscp_set_error(fmt, ...) \ - _mscp_set_error("%s:%d:%s: " fmt, \ + _mscp_set_error("%s:%d:%s: " fmt "\0", \ basename(__FILE__), __LINE__, __func__, ##__VA_ARGS__) void _mscp_set_error(const char *fmt, ...); |