Browse Source

copy.c: copy_fd - correctly report write errors

Previously, the errno could have been lost due to an intervening
close() call.

This patch also contains minor cosmetic changes.

Signed-off-by: Ariel Badichi <abadichi@bezeqint.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Ariel Badichi 17 years ago committed by Junio C Hamano
parent
commit
8b1f6de854
  1. 8
      copy.c

8
copy.c

@ -9,8 +9,7 @@ int copy_fd(int ifd, int ofd)
if (!len) if (!len)
break; break;
if (len < 0) { if (len < 0) {
int read_error; int read_error = errno;
read_error = errno;
close(ifd); close(ifd);
return error("copy-fd: read returned %s", return error("copy-fd: read returned %s",
strerror(read_error)); strerror(read_error));
@ -25,9 +24,10 @@ int copy_fd(int ifd, int ofd)
close(ifd); close(ifd);
return error("copy-fd: write returned 0"); return error("copy-fd: write returned 0");
} else { } else {
int write_error = errno;
close(ifd); close(ifd);
return error("copy-fd: write returned %s", return error("copy-fd: write returned %s",
strerror(errno)); strerror(write_error));
} }
} }
} }
@ -48,7 +48,7 @@ int copy_file(const char *dst, const char *src, int mode)
} }
status = copy_fd(fdi, fdo); status = copy_fd(fdi, fdo);
if (close(fdo) != 0) if (close(fdo) != 0)
return error("%s: write error: %s", dst, strerror(errno)); return error("%s: close error: %s", dst, strerror(errno));


if (!status && adjust_shared_perm(dst)) if (!status && adjust_shared_perm(dst))
return -1; return -1;

Loading…
Cancel
Save