diff options
| author | Furkan Sahin <furkan-dev@proton.me> | 2017-04-16 10:30:17 +0300 |
|---|---|---|
| committer | Furkan Sahin <furkan-dev@proton.me> | 2017-04-16 10:30:17 +0300 |
| commit | 43fd5820a7f751a832e1142dd23b8d2029f5b86e (patch) | |
| tree | 5dfa6984f5d64d1c63dfc402786f2023c7e33586 | |
| parent | f5f3888bcc14e1b750f580fd65661c75a99ef7b2 (diff) | |
Fix variadic forwarding in sway_assert
_sway_assert is a variadic function which tries
to delegate to another variadic function. This
requires a vprintf-style variant of the delegate.
https://stackoverflow.com/a/150616
| -rw-r--r-- | common/log.c | 15 | ||||
| -rw-r--r-- | include/log.h | 3 |
2 files changed, 13 insertions, 5 deletions
diff --git a/common/log.c b/common/log.c index c3809c69..23b756eb 100644 --- a/common/log.c +++ b/common/log.c @@ -63,7 +63,8 @@ void sway_abort(const char *format, ...) { sway_terminate(EXIT_FAILURE); } -void _sway_log(const char *filename, int line, log_importance_t verbosity, const char* format, ...) { +void _sway_vlog(const char *filename, int line, log_importance_t verbosity, + const char *format, va_list args) { if (verbosity <= v) { // prefix the time to the log message static struct tm result; @@ -99,10 +100,7 @@ void _sway_log(const char *filename, int line, log_importance_t verbosity, const fprintf(stderr, "[%s:%d] ", file, line); } - va_list args; - va_start(args, format); vfprintf(stderr, format, args); - va_end(args); if (colored && isatty(STDERR_FILENO)) { fprintf(stderr, "\x1B[0m"); @@ -111,6 +109,13 @@ void _sway_log(const char *filename, int line, log_importance_t verbosity, const } } +void _sway_log(const char *filename, int line, log_importance_t verbosity, const char* format, ...) { + va_list args; + va_start(args, format); + _sway_vlog(filename, line, verbosity, format, args); + va_end(args); +} + void sway_log_errno(log_importance_t verbosity, char* format, ...) { if (verbosity <= v) { unsigned int c = verbosity; @@ -144,7 +149,7 @@ bool _sway_assert(bool condition, const char* format, ...) { va_list args; va_start(args, format); - sway_log(L_ERROR, format, args); + sway_vlog(L_ERROR, format, args); va_end(args); #ifndef NDEBUG diff --git a/include/log.h b/include/log.h index 2c4150e4..60b3763b 100644 --- a/include/log.h +++ b/include/log.h @@ -28,6 +28,9 @@ void _sway_log(const char *filename, int line, log_importance_t verbosity, const #define sway_log(VERBOSITY, FMT, ...) \ _sway_log(__FILE__, __LINE__, VERBOSITY, FMT, ##__VA_ARGS__) +#define sway_vlog(VERBOSITY, FMT, VA_ARGS) \ + _sway_vlog(__FILE__, __LINE__, VERBOSITY, FMT, VA_ARGS) + void error_handler(int sig); #endif |
