diff --git a/src/unix/fs.c b/src/unix/fs.c index 52082e93..d739c282 100644 --- a/src/unix/fs.c +++ b/src/unix/fs.c @@ -574,7 +574,14 @@ static ssize_t uv__fs_sendfile(uv_fs_t* req) { r = sendfile(in_fd, out_fd, req->off, &len, NULL, 0); #endif - if (r != -1 || len != 0) { + /* + * The man page for sendfile(2) on DragonFly states that `len` contains + * a meaningful value ONLY in case of EAGAIN and EINTR. + * Nothing is said about it's value in case of other errors, so better + * not depend on the potential wrong assumption that is was not modified + * by the syscall. + */ + if (r == 0 || ((errno == EAGAIN || errno == EINTR) && len != 0)) { req->off += len; return (ssize_t) len; }