summaryrefslogtreecommitdiff
path: root/write_or_die.c
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2007-01-11 21:43:40 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-01-11 22:49:45 (GMT)
commit3b97fee23df7ec78eea77151fcc0885ec3191950 (patch)
tree7fc738d5d6c108e5a93a9861ecd01f8b7a6ec25d /write_or_die.c
parent9130ac1e1966adb9922e64f645730d0d45383495 (diff)
downloadgit-3b97fee23df7ec78eea77151fcc0885ec3191950.zip
git-3b97fee23df7ec78eea77151fcc0885ec3191950.tar.gz
git-3b97fee23df7ec78eea77151fcc0885ec3191950.tar.bz2
Avoid errors and warnings when attempting to do I/O on zero bytes
Unfortunately, while {read,write}_in_full do take into account zero-sized reads/writes; their die and whine variants do not. I have a repository where there are zero-sized files in the history that was triggering these things. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'write_or_die.c')
-rw-r--r--write_or_die.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/write_or_die.c b/write_or_die.c
index 7f99a22..488de72 100644
--- a/write_or_die.c
+++ b/write_or_die.c
@@ -26,6 +26,8 @@ void read_or_die(int fd, void *buf, size_t count)
{
ssize_t loaded;
+ if (!count)
+ return;
loaded = read_in_full(fd, buf, count);
if (loaded == 0)
die("unexpected end of file");
@@ -58,6 +60,8 @@ void write_or_die(int fd, const void *buf, size_t count)
{
ssize_t written;
+ if (!count)
+ return;
written = write_in_full(fd, buf, count);
if (written == 0)
die("disk full?");
@@ -72,6 +76,8 @@ int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg)
{
ssize_t written;
+ if (!count)
+ return 1;
written = write_in_full(fd, buf, count);
if (written == 0) {
fprintf(stderr, "%s: disk full?\n", msg);
@@ -92,6 +98,8 @@ int write_or_whine(int fd, const void *buf, size_t count, const char *msg)
{
ssize_t written;
+ if (!count)
+ return 1;
written = write_in_full(fd, buf, count);
if (written == 0) {
fprintf(stderr, "%s: disk full?\n", msg);