From 3b97fee23df7ec78eea77151fcc0885ec3191950 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 11 Jan 2007 13:43:40 -0800 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- sha1_file.c | 2 ++ write_or_die.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/sha1_file.c b/sha1_file.c index 53e25f278..18dd89b50 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1620,6 +1620,8 @@ static int write_buffer(int fd, const void *buf, size_t len) { ssize_t size; + if (!len) + return 0; size = write_in_full(fd, buf, len); if (!size) return error("file write: disk full"); diff --git a/write_or_die.c b/write_or_die.c index 7f99a22ae..488de721d 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); -- 2.30.2