Clean up write_in_full() users
With the new-and-improved write_in_full() semantics, where a partial write simply always returns a real error (and always sets 'errno' when that happens, including for the disk full case), a lot of the callers of write_in_full() were just unnecessarily complex. In particular, there's no reason to ever check for a zero length or return: if the length was zero, we'll return zero, otherwise, if a disk full resulted in the actual write() system call returning zero the write_in_full() logic would have correctly turned that into a negative return value, with 'errno' set to ENOSPC. I really wish every "write_in_full()" user would just check against "<0" now, but this fixes the nasty and stupid ones. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
9bbaa6cc68
commit
d34cf19b89
@ -1618,14 +1618,7 @@ int move_temp_to_file(const char *tmpfile, const char *filename)
|
|||||||
|
|
||||||
static int write_buffer(int fd, const void *buf, size_t len)
|
static int write_buffer(int fd, const void *buf, size_t len)
|
||||||
{
|
{
|
||||||
ssize_t size;
|
if (write_in_full(fd, buf, len) < 0)
|
||||||
|
|
||||||
if (!len)
|
|
||||||
return 0;
|
|
||||||
size = write_in_full(fd, buf, len);
|
|
||||||
if (!size)
|
|
||||||
return error("file write: disk full");
|
|
||||||
if (size < 0)
|
|
||||||
return error("file write error (%s)", strerror(errno));
|
return error("file write error (%s)", strerror(errno));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -58,14 +58,7 @@ int write_in_full(int fd, const void *buf, size_t count)
|
|||||||
|
|
||||||
void write_or_die(int fd, const void *buf, size_t count)
|
void write_or_die(int fd, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
ssize_t written;
|
if (write_in_full(fd, buf, count) < 0) {
|
||||||
|
|
||||||
if (!count)
|
|
||||||
return;
|
|
||||||
written = write_in_full(fd, buf, count);
|
|
||||||
if (written == 0)
|
|
||||||
die("disk full?");
|
|
||||||
else if (written < 0) {
|
|
||||||
if (errno == EPIPE)
|
if (errno == EPIPE)
|
||||||
exit(0);
|
exit(0);
|
||||||
die("write error (%s)", strerror(errno));
|
die("write error (%s)", strerror(errno));
|
||||||
@ -74,16 +67,7 @@ void write_or_die(int fd, const void *buf, size_t count)
|
|||||||
|
|
||||||
int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg)
|
int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg)
|
||||||
{
|
{
|
||||||
ssize_t written;
|
if (write_in_full(fd, buf, count) < 0) {
|
||||||
|
|
||||||
if (!count)
|
|
||||||
return 1;
|
|
||||||
written = write_in_full(fd, buf, count);
|
|
||||||
if (written == 0) {
|
|
||||||
fprintf(stderr, "%s: disk full?\n", msg);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else if (written < 0) {
|
|
||||||
if (errno == EPIPE)
|
if (errno == EPIPE)
|
||||||
exit(0);
|
exit(0);
|
||||||
fprintf(stderr, "%s: write error (%s)\n",
|
fprintf(stderr, "%s: write error (%s)\n",
|
||||||
@ -96,16 +80,7 @@ int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg)
|
|||||||
|
|
||||||
int write_or_whine(int fd, const void *buf, size_t count, const char *msg)
|
int write_or_whine(int fd, const void *buf, size_t count, const char *msg)
|
||||||
{
|
{
|
||||||
ssize_t written;
|
if (write_in_full(fd, buf, count) < 0) {
|
||||||
|
|
||||||
if (!count)
|
|
||||||
return 1;
|
|
||||||
written = write_in_full(fd, buf, count);
|
|
||||||
if (written == 0) {
|
|
||||||
fprintf(stderr, "%s: disk full?\n", msg);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else if (written < 0) {
|
|
||||||
fprintf(stderr, "%s: write error (%s)\n",
|
fprintf(stderr, "%s: write error (%s)\n",
|
||||||
msg, strerror(errno));
|
msg, strerror(errno));
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user