short i/o: fix calls to write to use xwrite or write_in_full
We have a number of badly checked write() calls. Often we are expecting write() to write exactly the size we requested or fail, this fails to handle interrupts or short writes. Switch to using the new write_in_full(). Otherwise we at a minimum need to check for EINTR and EAGAIN, where this is appropriate use xwrite(). Note, the changes to config handling are much larger and handled in the next patch in the sequence. Signed-off-by: Andy Whitcroft <apw@shadowen.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
committed by
Junio C Hamano
parent
93d26e4cb9
commit
93822c2239
10
ssh-upload.c
10
ssh-upload.c
@ -41,7 +41,8 @@ static int serve_object(int fd_in, int fd_out) {
|
||||
remote = -1;
|
||||
}
|
||||
|
||||
write(fd_out, &remote, 1);
|
||||
if (write_in_full(fd_out, &remote, 1) != 1)
|
||||
return 0;
|
||||
|
||||
if (remote < 0)
|
||||
return 0;
|
||||
@ -53,7 +54,7 @@ static int serve_version(int fd_in, int fd_out)
|
||||
{
|
||||
if (xread(fd_in, &remote_version, 1) < 1)
|
||||
return -1;
|
||||
write(fd_out, &local_version, 1);
|
||||
write_in_full(fd_out, &local_version, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -74,10 +75,11 @@ static int serve_ref(int fd_in, int fd_out)
|
||||
|
||||
if (get_ref_sha1(ref, sha1))
|
||||
remote = -1;
|
||||
write(fd_out, &remote, 1);
|
||||
if (write_in_full(fd_out, &remote, 1) != 1)
|
||||
return 0;
|
||||
if (remote)
|
||||
return 0;
|
||||
write(fd_out, sha1, 20);
|
||||
write_in_full(fd_out, sha1, 20);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user