about summary refs log tree commit diff
path: root/mshow.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-07-26 22:05:44 +0200
committerChristian Neukirchen <chneukirchen@gmail.com>2016-07-26 22:09:26 +0200
commit0a53f92e06f15b427bee868ee30e3c87fbf8db6d (patch)
tree692c9ea7cd70258916c4fce77005b9c7fbaccc32 /mshow.c
parent67f61f18ba25849b4bc3ad2e46500418c0c4f031 (diff)
downloadmblaze-0a53f92e06f15b427bee868ee30e3c87fbf8db6d.tar.gz
mblaze-0a53f92e06f15b427bee868ee30e3c87fbf8db6d.tar.xz
mblaze-0a53f92e06f15b427bee868ee30e3c87fbf8db6d.zip
mshow: writefile: write in a loop
Diffstat (limited to 'mshow.c')
-rw-r--r--mshow.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/mshow.c b/mshow.c
index 14db2ef..e41f0fb 100644
--- a/mshow.c
+++ b/mshow.c
@@ -354,11 +354,20 @@ writefile(char *name, char *buf, ssize_t len)
 		perror("open");
 		return -1;
 	}
-	if (write(fd, buf, len) != len) {
-		// XXX partial write
-		perror("write");
-		return -1;
-	}
+
+	ssize_t wr = 0, n;
+	do {
+		if ((n = write(fd, buf + wr, len - wr)) == -1) {
+			if (errno == EINTR) {
+				continue;
+			} else {
+				perror("write");
+				return -1;
+			}
+		}
+		wr += n;
+	} while (wr < len);
+
 	close(fd);
 	return 0;
 }