summary refs log tree commit diff
path: root/mshow.c
diff options
context:
space:
mode:
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;
 }