From 0a53f92e06f15b427bee868ee30e3c87fbf8db6d Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Tue, 26 Jul 2016 22:05:44 +0200 Subject: [PATCH] mshow: writefile: write in a loop --- mshow.c | 19 ++++++++++++++----- 1 file 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; }