summaryrefslogtreecommitdiff
path: root/write_or_die.c
diff options
context:
space:
mode:
Diffstat (limited to 'write_or_die.c')
-rw-r--r--write_or_die.c45
1 files changed, 20 insertions, 25 deletions
diff --git a/write_or_die.c b/write_or_die.c
index e7f8263..a119e1d 100644
--- a/write_or_die.c
+++ b/write_or_die.c
@@ -33,45 +33,40 @@ void read_or_die(int fd, void *buf, size_t count)
die("read error (%s)", strerror(errno));
}
-void write_or_die(int fd, const void *buf, size_t count)
+int write_in_full(int fd, const void *buf, size_t count)
{
const char *p = buf;
- ssize_t written;
+ ssize_t total = 0;
+ ssize_t written = 0;
while (count > 0) {
written = xwrite(fd, p, count);
- if (written == 0)
- die("disk full?");
- else if (written < 0) {
- if (errno == EPIPE)
- exit(0);
- die("write error (%s)", strerror(errno));
+ if (written <= 0) {
+ if (total)
+ return total;
+ else
+ return written;
}
count -= written;
p += written;
+ total += written;
}
+
+ return total;
}
-int write_in_full(int fd, const void *buf, size_t count)
+void write_or_die(int fd, const void *buf, size_t count)
{
- const char *p = buf;
- ssize_t total = 0;
- ssize_t wcount = 0;
+ ssize_t written;
- while (count > 0) {
- wcount = xwrite(fd, p, count);
- if (wcount <= 0) {
- if (total)
- return total;
- else
- return wcount;
- }
- count -= wcount;
- p += wcount;
- total += wcount;
+ written = write_in_full(fd, buf, count);
+ if (written == 0)
+ die("disk full?");
+ else if (written < 0) {
+ if (errno == EPIPE)
+ exit(0);
+ die("write error (%s)", strerror(errno));
}
-
- return wcount;
}
int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg)