Fix #4270
This commit is contained in:
parent
3592a94517
commit
f081d6a421
@ -117,6 +117,7 @@ static bool
|
|||||||
copy_between_files(int infd, int outfd, off_t in_pos, size_t len, uint8_t *buf, size_t bufsz) {
|
copy_between_files(int infd, int outfd, off_t in_pos, size_t len, uint8_t *buf, size_t bufsz) {
|
||||||
#ifdef HAS_SENDFILE
|
#ifdef HAS_SENDFILE
|
||||||
(void)buf; (void)bufsz;
|
(void)buf; (void)bufsz;
|
||||||
|
unsigned num_of_consecutive_zero_returns = 128;
|
||||||
while (len) {
|
while (len) {
|
||||||
off_t r = in_pos;
|
off_t r = in_pos;
|
||||||
ssize_t n = sendfile(outfd, infd, &r, len);
|
ssize_t n = sendfile(outfd, infd, &r, len);
|
||||||
@ -124,6 +125,12 @@ copy_between_files(int infd, int outfd, off_t in_pos, size_t len, uint8_t *buf,
|
|||||||
if (errno != EAGAIN) return false;
|
if (errno != EAGAIN) return false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (n == 0) {
|
||||||
|
// happens if input file is truncated
|
||||||
|
if (!--num_of_consecutive_zero_returns) return false;
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
num_of_consecutive_zero_returns = 128;
|
||||||
in_pos += n; len -= n;
|
in_pos += n; len -= n;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user