From 92ec05ab67c461a0aaa189292166e094eb37ce41 Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Sat, 26 Jul 2008 20:47:49 +0000 Subject: [PATCH] Save and restore errno before using %m specifier --- src/daemonitor/200_log.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/daemonitor/200_log.c b/src/daemonitor/200_log.c index cfcf5a0..2a5c545 100644 --- a/src/daemonitor/200_log.c +++ b/src/daemonitor/200_log.c @@ -111,11 +111,14 @@ int log_func_fd; void log_func_file(int level, const char* fmt, ...) { va_list va; - int ret; + int ret, saved_errno; const char* level_str; char timebuf[40]; time_t t; + /* save errno, because dprintf will clobber it */ + saved_errno = errno; + /* choose appropriate line description */ switch(level) { case LOG_EMERG: level_str = "EMERG"; break; @@ -136,6 +139,7 @@ void log_func_file(int level, const char* fmt, ...) /* print to file descriptor */ va_start(va, fmt); ret = dprintf(log_func_fd, "%s %s ", timebuf, level_str); + errno = saved_errno; if(ret != -1) ret = vdprintf(log_func_fd, fmt, va); if(ret != -1 && safe_write_fixed(log_func_fd, "\n", 1) != 1) ret = -1; va_end(va);