commit 93a43d03b00ddf8757636b69ad24d2f5de3336da
Author:     Hiltjo Posthuma <hil...@codemadness.org>
AuthorDate: Sun Oct 27 20:10:30 2024 +0100
Commit:     Hiltjo Posthuma <hil...@codemadness.org>
CommitDate: Sun Oct 27 20:10:30 2024 +0100

    util.c: output function might override errno and thus affect perror()
    
    Original patch by Raymond Cole with some modifications, thanks!

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);
 }

Reply via email to