[PATCH] Avoid errors and warnings when attempting to do I/O on zero bytes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxx>
---
 sha1_file.c    |    2 ++
 write_or_die.c |    8 ++++++++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/sha1_file.c b/sha1_file.c
index 53e25f2..18dd89b 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 a119e1d..700ccd1 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");
@@ -59,6 +61,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?");
@@ -73,6 +77,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);
@@ -93,6 +99,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);
-- 
Eric Wong
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]