This commit fixes uv_fs_copyfile() in cases where an unknown error occurs when copy-on-write is requested by setting UV_FS_COPYFILE_FICLONE. The original approach tried to catch some of the errors raised by the ioctl() call, assuming that sendfile() would also fail in those cases. This is not necessarily true, as some variants of ioctl() also raise EINVAL (some maybe EBADF), but sendfile() works just fine. This patch reverses the logic, falling back to sendfile() in any case where ioctl() returns an error. In other words, it tries much harder to make uv_fs_copyfile() work. Related to that, the original approach returned UV_ENOTSUP unconditionally in cases where ioctl() failed and UV_FS_COPYFILE_FICLONE_FORCE was set. However, ioctl() may have failed for other reasons than being not supported. The function now returns the actual error raised by ioctl(), leaving it to the caller to deal with it. Fixes: https://github.com/libuv/libuv/issues/2483 PR-URL: https://github.com/libuv/libuv/pull/2514 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> |
||
|---|---|---|
| .. | ||
| code | ||
| src | ||
| make.bat | ||
| Makefile | ||