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-Tag: v239~341 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d1a1f0aaf0d2f08c60d1e0d32e646439d99f58dc;p=thirdparty%2Fsystemd.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. --- diff --git a/src/basic/log.c b/src/basic/log.c index 77d016ecb3c..6f442420110 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -735,9 +735,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) { @@ -860,8 +859,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); @@ -962,8 +960,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); @@ -1261,8 +1258,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);