From: Zbigniew Jędrzejewski-Szmek Date: Fri, 27 Apr 2018 16:00:58 +0000 (+0200) Subject: basic/log: always ignore errno from the enviornment (#8841) X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=84343de19cf997ed0b8288ec1ff5b1d33c265993;p=elogind.git basic/log: always ignore errno from the enviornment (#8841) This extends the change done in b29f6480ec to other logging functions. This actually fixes some bugs in callers of log_struct(), for example config_parse_alias() called 'return log_syntax(..., 0, ...)' which could result in a bogus non-zero return value. Calls to log_object() and log_format_iovec() — which is only used by server_driver_message() — appear correct. (cherry picked from commit d1a1f0aaf0d2f08c60d1e0d32e646439d99f58dc) --- diff --git a/src/basic/log.c b/src/basic/log.c index c72ace0f4..a874ab58b 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -764,9 +764,8 @@ static int log_object_internalv( if (_likely_(LOG_PRI(level) > log_max_level[LOG_REALM_SYSTEMD])) return -error; - /* Make sure that %m maps to the specified error */ - if (error != 0) - errno = error; + /* Make sure that %m maps to the specified error (or "Success"). */ + errno = error; /* Prepend the object name before the message */ if (object) { @@ -889,8 +888,7 @@ int log_format_iovec( * since vasprintf() leaves it afterwards at * an undefined location */ - if (error != 0) - errno = error; + errno = error; va_copy(aq, ap); r = vasprintf(&m, format, aq); @@ -993,8 +991,7 @@ int log_struct_internal( while (format) { va_list aq; - if (error != 0) - errno = error; + errno = error; va_copy(aq, ap); (void) vsnprintf(buf, sizeof buf, format, aq); @@ -1296,8 +1293,7 @@ int log_syntax_internal( if (log_target == LOG_TARGET_NULL) return -error; - if (error != 0) - errno = error; + errno = error; va_start(ap, format); (void) vsnprintf(buffer, sizeof buffer, format, ap);