diff options
| author | Eric Wong <normalperson@yhbt.net> | 2007-01-11 13:43:40 -0800 | 
|---|---|---|
| committer | Junio C Hamano <junkio@cox.net> | 2007-01-11 14:49:45 -0800 | 
| commit | 3b97fee23df7ec78eea77151fcc0885ec3191950 (patch) | |
| tree | 7fc738d5d6c108e5a93a9861ecd01f8b7a6ec25d | |
| parent | 9130ac1e1966adb9922e64f645730d0d45383495 (diff) | |
| download | git-3b97fee23df7ec78eea77151fcc0885ec3191950.tar.gz | |
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>
| -rw-r--r-- | sha1_file.c | 2 | ||||
| -rw-r--r-- | write_or_die.c | 8 | 
2 files changed, 10 insertions, 0 deletions
| diff --git a/sha1_file.c b/sha1_file.c index 53e25f278c..18dd89b50a 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 7f99a22aed..488de721da 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); | 
