util.c: output function might override errno and thus affect perror() - dwm - dynamic window manager
(HTM) git clone git://git.suckless.org/dwm
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit fcb2476b693ca4c40ad32c7119e27bbeb856865c
(DIR) parent 8933ebcf50024f4378a78e556b1ac08091197206
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 27 Oct 2024 20:10:07 +0100
util.c: output function might override errno and thus affect perror()
Original patch by Raymond Cole with some modifications, thanks!
Diffstat:
M util.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
---
(DIR) diff --git 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);
}