about summary refs log tree commit diff
diff options
context:
space:
mode:
authorHiltjo Posthuma <hiltjo@codemadness.org>2024-10-27 20:10:07 +0100
committerHiltjo Posthuma <hiltjo@codemadness.org>2024-10-27 20:10:07 +0100
commitfcb2476b693ca4c40ad32c7119e27bbeb856865c (patch)
tree2bde8374f00eb53f7296e5f1a8ea6b9d4ed32b3d
parent8933ebcf50024f4378a78e556b1ac08091197206 (diff)
util.c: output function might override errno and thus affect perror()
Original patch by Raymond Cole with some modifications, thanks!
-rw-r--r--util.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/util.c b/util.c
index 96b82c9..8e26a51 100644
--- a/util.c
+++ b/util.c
@@ -1,4 +1,5 @@
 /* See LICENSE file for copyright and license details. */
+#include <errno.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -10,17 +11,17 @@ void
 die(const char *fmt, ...)
 {
 	va_list ap;
+	int saved_errno;
+
+	saved_errno = errno;
 
 	va_start(ap, fmt);
 	vfprintf(stderr, fmt, ap);
 	va_end(ap);
 
-	if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
-		fputc(' ', stderr);
-		perror(NULL);
-	} else {
-		fputc('\n', stderr);
-	}
+	if (fmt[0] && fmt[strlen(fmt)-1] == ':')
+		fprintf(stderr, " %s", strerror(saved_errno));
+	fputc('\n', stderr);
 
 	exit(1);
 }