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: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=cbb9e59083da8cedd08a059008f8ef2b1bac25a2;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. --- diff --git a/src/basic/log.c b/src/basic/log.c index 6d5616730..ed02a4b90 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -751,9 +751,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) { @@ -876,8 +875,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); @@ -980,8 +978,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); @@ -1283,8 +1280,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);