diff options
author | Linus Torvalds <torvalds@osdl.org> | 2007-01-11 13:04:11 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-01-11 13:19:18 -0800 |
commit | f6aa66cb959393b6605a3288a3080d92d0983d78 (patch) | |
tree | 66811d1ac2f8343498b8028b76b5a8f8a2f500be | |
parent | d145144c3ba050a1a8c8296f337b77a18500af00 (diff) | |
download | git-f6aa66cb959393b6605a3288a3080d92d0983d78.tar.gz git-f6aa66cb959393b6605a3288a3080d92d0983d78.tar.xz |
write_in_full: really write in full or return error on disk full.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | write_or_die.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/write_or_die.c b/write_or_die.c index a119e1d20..7f99a22ae 100644 --- a/write_or_die.c +++ b/write_or_die.c @@ -37,15 +37,14 @@ int write_in_full(int fd, const void *buf, size_t count) { const char *p = buf; ssize_t total = 0; - ssize_t written = 0; while (count > 0) { - written = xwrite(fd, p, count); - if (written <= 0) { - if (total) - return total; - else - return written; + size_t written = xwrite(fd, p, count); + if (written < 0) + return -1; + if (!written) { + errno = ENOSPC; + return -1; } count -= written; p += written; |