diff options
author | Christian Göttsche <cgzones@googlemail.com> | 2022-06-22 19:25:30 +0200 |
---|---|---|
committer | cgzones <cgzones@googlemail.com> | 2022-06-28 14:39:11 +0200 |
commit | f3e70ab389879db5b250bab29f14acb543bfd11f (patch) | |
tree | 729b829ad49370ab4a0ddc1a891c30ed3911d157 /XUtils.c | |
parent | 393796d75da57983710f8bfdacd272f773fad47b (diff) |
Write full buffer
Retry writing after a short write.
Diffstat (limited to 'XUtils.c')
-rw-r--r-- | XUtils.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -313,3 +313,26 @@ ssize_t xReadfileat(openat_arg_t dirfd, const char* pathname, void* buffer, size return readfd_internal(fd, buffer, count); } + +ssize_t full_write(int fd, const void *buf, size_t count) { + ssize_t written = 0; + + while (count > 0) { + ssize_t r = write(fd, buf, count); + if (r < 0) { + if (errno == EINTR) + continue; + + return r; + } + + if (r == 0) + break; + + written += r; + buf = (const unsigned char*)buf + r; + count -= (size_t)r; + } + + return written; +} |