summaryrefslogtreecommitdiffstats
path: root/usr.sbin/switchd
diff options
context:
space:
mode:
authorreyk <reyk@openbsd.org>2017-01-08 20:31:03 +0000
committerreyk <reyk@openbsd.org>2017-01-08 20:31:03 +0000
commit9f5ef5a99db00059ead4da402bfda7bffc0cb808 (patch)
treeebc8e8ac80e7497258c3ec53abd43286d07fd3fc /usr.sbin/switchd
parentRevert the addition of PROMOTE_MODE. This breaks libobjc; I guess the (diff)
downloadwireguard-openbsd-9f5ef5a99db00059ead4da402bfda7bffc0cb808.tar.xz
wireguard-openbsd-9f5ef5a99db00059ead4da402bfda7bffc0cb808.zip
Sync log.c with the latest version from vmd/log.c that preserves errno
so it is safe calling log_* after an error without loosing the it.
Diffstat (limited to 'usr.sbin/switchd')
-rw-r--r--usr.sbin/switchd/log.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/usr.sbin/switchd/log.c b/usr.sbin/switchd/log.c
index eb436e4fb62..459cd67708c 100644
--- a/usr.sbin/switchd/log.c
+++ b/usr.sbin/switchd/log.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: log.c,v 1.2 2016/10/12 11:57:31 reyk Exp $ */
+/* $OpenBSD: log.c,v 1.3 2017/01/08 20:31:03 reyk Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -90,6 +90,7 @@ void
vlog(int pri, const char *fmt, va_list ap)
{
char *nfmt;
+ int saved_errno = errno;
if (debug) {
/* best effort in out of mem situations */
@@ -103,8 +104,9 @@ vlog(int pri, const char *fmt, va_list ap)
fflush(stderr);
} else
vsyslog(pri, fmt, ap);
-}
+ errno = saved_errno;
+}
void
log_warn(const char *emsg, ...)
@@ -130,6 +132,8 @@ log_warn(const char *emsg, ...)
}
va_end(ap);
}
+
+ errno = saved_errno;
}
void
@@ -165,11 +169,10 @@ log_debug(const char *emsg, ...)
}
static void
-vfatal(const char *emsg, va_list ap)
+vfatalc(int code, const char *emsg, va_list ap)
{
static char s[BUFSIZ];
const char *sep;
- int saved_errno = errno;
if (emsg != NULL) {
(void)vsnprintf(s, sizeof(s), emsg, ap);
@@ -178,9 +181,9 @@ vfatal(const char *emsg, va_list ap)
s[0] = '\0';
sep = "";
}
- if (saved_errno)
+ if (code)
logit(LOG_CRIT, "%s: %s%s%s",
- log_procname, s, sep, strerror(saved_errno));
+ log_procname, s, sep, strerror(code));
else
logit(LOG_CRIT, "%s%s%s", log_procname, sep, s);
}
@@ -191,7 +194,7 @@ fatal(const char *emsg, ...)
va_list ap;
va_start(ap, emsg);
- vfatal(emsg, ap);
+ vfatalc(errno, emsg, ap);
va_end(ap);
exit(1);
}
@@ -201,9 +204,8 @@ fatalx(const char *emsg, ...)
{
va_list ap;
- errno = 0;
va_start(ap, emsg);
- vfatal(emsg, ap);
+ vfatalc(0, emsg, ap);
va_end(ap);
exit(1);
}