From f76a57c29abf99e7b259dc5e0a264faf995db6ef Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Thu, 26 Mar 2015 11:23:12 +0300 Subject: [PATCH] log: Don't modify global @errno in __print_on_level The __print_on_level routine may modify global @errno variable which is inacceptable: this is logging routine which must be transparent to the rest of the program code. Thus save @errno in local @__errno variable and restore it on return. Signed-off-by: Cyrill Gorcunov Acked-by: Andrew Vagin Signed-off-by: Pavel Emelyanov --- log.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/log.c b/log.c index a9f1757ef..e32e38b2a 100644 --- a/log.c +++ b/log.c @@ -155,6 +155,7 @@ unsigned int log_get_loglevel(void) static void __print_on_level(unsigned int loglevel, const char *format, va_list params) { int fd, size, ret, off = 0; + int __errno = errno; if (unlikely(loglevel == LOG_MSG)) { fd = STDOUT_FILENO; @@ -176,6 +177,7 @@ static void __print_on_level(unsigned int loglevel, const char *format, va_list break; off += ret; } + errno = __errno; } void print_on_level(unsigned int loglevel, const char *format, ...)