diff -r a8d183e79ed9 -r 74fb62022fb3 src/lib/log.h --- a/src/lib/log.h Wed Oct 08 22:05:13 2008 +0300 +++ b/src/lib/log.h Thu Oct 09 00:33:37 2008 +0300 @@ -5,11 +5,21 @@ * error handling */ -void _generic_err ( /*int level, */ int use_stderr, const char *func, int perr, const char *fmt, ...) +enum log_display_flags { + LOG_DISPLAY_STDOUT = 0x00, + LOG_DISPLAY_STDERR = 0x01, + + LOG_DISPLAY_PERR = 0x02, + + LOG_DISPLAY_NONL = 0x04, +}; + + +void _generic_err (int flags, const char *func, int err, const char *fmt, ...) __attribute__ ((format (printf, 4, 5))); // needs to be defined as its own function for the noreturn attribute -void _generic_err_exit ( /* int level, */ int used_stderr, const char *func, int perr, const char *fmt, ...) +void _generic_err_exit (int flags, const char *func, int err, const char *fmt, ...) __attribute__ ((format (printf, 4, 5))) __attribute__ ((noreturn)); @@ -25,20 +35,20 @@ extern enum _debug_level _cur_debug_level; // various kinds of ways to handle an error, 2**3 of them, *g* -#define info(...) _generic_err( 0, NULL, 0, __VA_ARGS__ ) -#define error(...) _generic_err( 1, NULL, 0, __VA_ARGS__ ) -#define err_exit(...) _generic_err_exit( 1, NULL, 0, __VA_ARGS__ ) -#define perr(...) _generic_err( 1, NULL, 1, __VA_ARGS__ ) -#define perr_exit(...) _generic_err_exit( 1, NULL, 1, __VA_ARGS__ ) -#define err_func(func, ...) _generic_err( 1, func, 0, __VA_ARGS__ ) -#define err_func_exit(func, ...) _generic_err_exit( 1, func, 0, __VA_ARGS__ ) -#define perr_func(func, ...) _generic_err( 1, func, 1, __VA_ARGS__ ) -#define perr_func_exit(func, ...) _generic_err_exit( 1, func, 1, __VA_ARGS__ ) -#define eerr_func(func, err, ...) _generic_err( 1, func, err,__VA_ARGS__ ) +#define info(...) _generic_err( LOG_DISPLAY_STDOUT, NULL, 0, __VA_ARGS__ ) +#define error(...) _generic_err( LOG_DISPLAY_STDERR, NULL, 0, __VA_ARGS__ ) +#define err_exit(...) _generic_err_exit( LOG_DISPLAY_STDERR, NULL, 0, __VA_ARGS__ ) +#define perr(...) _generic_err( LOG_DISPLAY_STDERR | LOG_DISPLAY_PERR, NULL, 0, __VA_ARGS__ ) +#define perr_exit(...) _generic_err_exit( LOG_DISPLAY_STDERR | LOG_DISPLAY_PERR, NULL, 0, __VA_ARGS__ ) +#define err_func(func, ...) _generic_err( LOG_DISPLAY_STDERR, func, 0, __VA_ARGS__ ) +#define err_func_exit(func, ...) _generic_err_exit( LOG_DISPLAY_STDERR, func, 0, __VA_ARGS__ ) +#define perr_func(func, ...) _generic_err( LOG_DISPLAY_STDERR | LOG_DISPLAY_PERR, func, 0, __VA_ARGS__ ) +#define perr_func_exit(func, ...) _generic_err_exit( LOG_DISPLAY_STDERR | LOG_DISPLAY_PERR, func, 0, __VA_ARGS__ ) +#define eerr_func(func, err, ...) _generic_err( LOG_DISPLAY_STDERR | LOG_DISPLAY_PERR, func, err, __VA_ARGS__ ) +#define debug(func, ...) _generic_err( LOG_DISPLAY_STDERR, func, 0, __VA_ARGS__ ) +#define debug_nonl(func, ...) _generic_err( LOG_DISPLAY_STDERR | LOG_DISPLAY_NONL, func, 0, __VA_ARGS__ ) -/* - * Legacy... - */ +// logging includes errors #include "error.h" #define WARNING(...) err_func(__func__, __VA_ARGS__) @@ -46,9 +56,15 @@ #define EWARNING(err, ...) eerr_func(__func__, (err), __VA_ARGS__) #ifdef DEBUG_ENABLED -#define DEBUG(...) err_func(__func__, __VA_ARGS__) +#define DEBUG(...) debug(__func__, __VA_ARGS__) +#define DEBUGF(...) debug(NULL, __VA_ARGS__) +#define DEBUGN(...) debug_nonl(__func__, __VA_ARGS__) +#define DEBUGNF(...) debug_nonl(NULL, __VA_ARGS__) #else #define DEBUG(...) (void) (0) +#define DEBUGF(...) (void) (0) +#define DEBUGN(...) (void) (0) +#define DEBUGNF(...) (void) (0) #endif // default is to enable INFO @@ -63,7 +79,7 @@ #if INFO_ENABLED #define INFO(...) info(__VA_ARGS__) #else -#define INFO(...) (void) (0) +#define INFO(...) (void) (__VA_ARGS__) #endif #endif /* LIB_LOG_H */