38#define M_DEBUG_LEVEL (0x0F)
41#define M_NONFATAL (1<<5)
47#define M_NOMUTE (1<<11)
48#define M_NOPREFIX (1<<12)
49#define M_USAGE_SMALL (1<<13)
50#define M_MSG_VIRT_OUT (1<<14)
51#define M_OPTERR (1<<15)
53#define M_NOIPREFIX (1<<17)
56#define M_ERR (M_FATAL | M_ERRNO)
57#define M_USAGE (M_USAGE_SMALL | M_NOPREFIX | M_OPTERR)
58#define M_CLIENT (M_MSG_VIRT_OUT | M_NOMUTE | M_NOIPREFIX)
66#pragma warning(disable: 4127)
68#define EXIT_FATAL(flags) do { if ((flags) & M_FATAL) {_exit(1);}} while (false)
70#define msg(flags, ...) do { if (msg_test(flags)) {x_msg((flags), __VA_ARGS__);} EXIT_FATAL(flags); } while (false)
72#define dmsg(flags, ...) do { if (msg_test(flags)) {x_msg((flags), __VA_ARGS__);} EXIT_FATAL(flags); } while (false)
74#define dmsg(flags, ...)
77void x_msg(
const unsigned int flags,
const char *format, ...);
79void x_msg_va(
const unsigned int flags,
const char *format, va_list arglist);
static bool msg_test(unsigned int flags)
Return true if flags represent an enabled, not muted log level.
unsigned int x_debug_level
bool dont_mute(unsigned int flags)
Check muting filter.
void x_msg(const unsigned int flags, const char *format,...)
static bool check_debug_level(unsigned int level)
void x_msg_va(const unsigned int flags, const char *format, va_list arglist)