summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2014-07-20 02:03:21 +0000
committerguenther <guenther@openbsd.org>2014-07-20 02:03:21 +0000
commit0976a62eed9efa8a56fe08c0e6111f8914501630 (patch)
tree083a71329085613117cd1b14fc643ada5c24725e
parentFix ordering breakage, moving the fclose() test last again. (diff)
downloadwireguard-openbsd-0976a62eed9efa8a56fe08c0e6111f8914501630.tar.xz
wireguard-openbsd-0976a62eed9efa8a56fe08c0e6111f8914501630.zip
Make sure the correct errno is reported by warn* or err* and not
the errno of an intervening cleanup operation like close/unlink/etc. Also, the format string for warn* and err* shouldn't end with a newline. Diff from Doug Hogan (doug (at) acyclic.org)
-rw-r--r--sys/dev/microcode/bwi/build/build.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/sys/dev/microcode/bwi/build/build.c b/sys/dev/microcode/bwi/build/build.c
index 2869b3ad0cc..41aa6fa5ada 100644
--- a/sys/dev/microcode/bwi/build/build.c
+++ b/sys/dev/microcode/bwi/build/build.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: build.c,v 1.3 2014/07/12 19:01:49 tedu Exp $ */
+/* $OpenBSD: build.c,v 1.4 2014/07/20 02:03:21 guenther Exp $ */
/*
* Copyright (c) 2006 Marcus Glocker <mglocker@openbsd.org>
@@ -20,6 +20,7 @@
#include <sys/stat.h>
#include <err.h>
+#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@@ -104,12 +105,14 @@ main(int argc, char *argv[])
/* write header */
if (write(fdout, &nfiles, sizeof(nfiles)) < 1) {
+ int saved_errno = errno;
close(fdout);
- err(1, "write header 1 to output file failed\n");
+ errc(1, saved_errno, "write header 1 to output file failed");
}
if (write(fdout, h, headersize - sizeof(nfiles)) < 1) {
+ int saved_errno = errno;
close(fdout);
- err(1, "write header 2 to output file failed\n");
+ errc(1, saved_errno, "write header 2 to output file failed");
}
/* network to host byte order */
@@ -122,25 +125,29 @@ main(int argc, char *argv[])
/* write each file */
for (i = 0; i < nfiles; i++) {
if ((fdin = open(h[i].filename, O_RDONLY)) == -1) {
+ int saved_errno = errno;
close(fdout);
- err(1, "open input file failed\n");
+ errc(1, saved_errno, "open input file failed");
}
if ((p = malloc(h[i].filesize)) == NULL) {
+ int saved_errno = errno;
close(fdout);
close(fdin);
- err(1, "malloc");
+ errc(1, saved_errno, "malloc");
}
if (read(fdin, p, h[i].filesize) < 1) {
+ int saved_errno = errno;
free(p);
close(fdout);
close(fdin);
- err(1, "read input file failed\n");
+ errc(1, saved_errno, "read input file failed");
}
if (write(fdout, p, h[i].filesize) < 1) {
+ int saved_errno = errno;
free(p);
close(fdout);
close(fdin);
- err(1, "write to output file failed\n");
+ errc(1, saved_errno, "write to output file failed");
}
free(p);
close(fdin);