]> git.ipfire.org Git - thirdparty/git.git/blame - copy.c
Makefile: Remove git-fsck and git-verify-pack from PROGRAMS
[thirdparty/git.git] / copy.c
CommitLineData
f3123c4a
JH
1#include "cache.h"
2
3int copy_fd(int ifd, int ofd)
4{
5 while (1) {
f3123c4a
JH
6 char buffer[8192];
7 char *buf = buffer;
8a912bcb 8 ssize_t len = xread(ifd, buffer, sizeof(buffer));
f3123c4a
JH
9 if (!len)
10 break;
11 if (len < 0) {
e6c64fc1 12 int read_error;
e6c64fc1
JH
13 read_error = errno;
14 close(ifd);
f3123c4a 15 return error("copy-fd: read returned %s",
e6c64fc1 16 strerror(read_error));
f3123c4a 17 }
1c15afb9
JH
18 while (len) {
19 int written = xwrite(ofd, buf, len);
f3123c4a
JH
20 if (written > 0) {
21 buf += written;
22 len -= written;
f3123c4a 23 }
08337a97
SR
24 else if (!written) {
25 close(ifd);
f3123c4a 26 return error("copy-fd: write returned 0");
08337a97
SR
27 } else {
28 close(ifd);
1c15afb9
JH
29 return error("copy-fd: write returned %s",
30 strerror(errno));
08337a97 31 }
f3123c4a
JH
32 }
33 }
34 close(ifd);
35 return 0;
36}
37