diff --git a/log.c b/log.c index f0287e4..ff7346f 100644 --- a/log.c +++ b/log.c @@ -107,28 +107,37 @@ void log_msg(enum log_class log_class, const char *module, const char *file, int lineno, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - _log(log_class, module, file, lineno, fmt, 0, ap); - va_end(ap); + va_list ap1, ap2; + va_start(ap1, fmt); + va_copy(ap2, ap1); + _log(log_class, module, file, lineno, fmt, 0, ap1); + _sys_log(log_class, module, file, lineno, fmt, 0, ap2); + va_end(ap1); + va_end(ap2); } void log_errno(enum log_class log_class, const char *module, const char *file, int lineno, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - _log(log_class, module, file, lineno, fmt, errno, ap); - va_end(ap); + va_list ap1, ap2; + va_start(ap1, fmt); + va_copy(ap2, ap1); + _log(log_class, module, file, lineno, fmt, errno, ap1); + _sys_log(log_class, module, file, lineno, fmt, errno, ap2); + va_end(ap1); + va_end(ap2); } void log_errno_provided(enum log_class log_class, const char *module, const char *file, int lineno, int _errno, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - _log(log_class, module, file, lineno, fmt, _errno, ap); - va_end(ap); + va_list ap1, ap2; + va_start(ap1, fmt); + va_copy(ap2, ap1); + _log(log_class, module, file, lineno, fmt, _errno, ap1); + _sys_log(log_class, module, file, lineno, fmt, _errno, ap2); + va_end(ap1); + va_end(ap2); }