diff options
author | Christian Neukirchen <chneukirchen@gmail.com> | 2016-07-26 22:05:44 +0200 |
---|---|---|
committer | Christian Neukirchen <chneukirchen@gmail.com> | 2016-07-26 22:09:26 +0200 |
commit | 0a53f92e06f15b427bee868ee30e3c87fbf8db6d (patch) | |
tree | 692c9ea7cd70258916c4fce77005b9c7fbaccc32 /mshow.c | |
parent | 67f61f18ba25849b4bc3ad2e46500418c0c4f031 (diff) | |
download | mblaze-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.c | 19 |
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; } |