logging: avoid changing errno.
authorMarko Kreen <markokr@gmail.com>
Mon, 19 Apr 2010 07:14:58 +0000 (10:14 +0300)
committerMarko Kreen <markokr@gmail.com>
Tue, 27 Apr 2010 13:00:05 +0000 (16:00 +0300)
So user can safely log syscall results without worrying about errno changing.

usual/logging.c

index 36e34e48433cddb3dc40ceb19bcde46f5dbd8afe..db53e3b748fcafc8391a050ac56640cef866453b 100644 (file)
@@ -101,11 +101,12 @@ void log_generic(enum LogLevel level, void *ctx, const char *fmt, ...)
        unsigned pid = getpid();
        va_list ap;
        int pfxlen = 0;
+       int old_errno = errno;
 
        if (logging_prefix_cb) {
                pfxlen = logging_prefix_cb(level, ctx, buf, sizeof(buf));
                if (pfxlen < 0)
-                       return;
+                       goto done;
                if (pfxlen >= (int)sizeof(buf))
                        pfxlen = sizeof(buf) - 1;
        }
@@ -141,6 +142,9 @@ void log_generic(enum LogLevel level, void *ctx, const char *fmt, ...)
                        start_syslog();
                syslog(lev->syslog_prio, "%s", buf);
        }
+done:
+       if (old_errno != errno)
+               errno = old_errno;
 }