diff --git a/src/zm_sendfile.h b/src/zm_sendfile.h index fd72e2e61..3568e2fea 100644 --- a/src/zm_sendfile.h +++ b/src/zm_sendfile.h @@ -3,22 +3,25 @@ #ifdef HAVE_SENDFILE4_SUPPORT #include -int zm_sendfile(int out_fd, int in_fd, off_t *offset, size_t size) { - int err; +ssize_t zm_sendfile(int out_fd, int in_fd, off_t *offset, size_t size) { + size_t remaining = size; + while (remaining) { + ssize_t err = sendfile(out_fd, in_fd, offset, remaining); + if (err < 0) { + return -errno; + } + remaining -= err; + offset += err; + } - err = sendfile(out_fd, in_fd, offset, size); - if ( err < 0 ) - return -errno; - - return err; + return size-remaining; } #elif HAVE_SENDFILE7_SUPPORT #include #include #include -int zm_sendfile(int out_fd, int in_fd, off_t *offset, off_t size) { - int err; - err = sendfile(in_fd, out_fd, *offset, size, nullptr, &size, 0); +ssize_t zm_sendfile(int out_fd, int in_fd, off_t *offset, off_t size) { + ssize_t err = sendfile(in_fd, out_fd, *offset, size, nullptr, &size, 0); if (err && errno != EAGAIN) return -errno;