libuv/test
Stefan Bender ddcaff9a10
unix: update uv_fs_copyfile() fallback logic
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>
2019-10-16 10:49:42 -04:00
..
fixtures unix: make uv_fs_read() fill all buffers 2019-06-20 12:06:31 +02:00
benchmark-async-pummel.c src,lib: fix comments 2018-05-22 16:34:33 -04:00
benchmark-async.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
benchmark-fs-stat.c unix,windows: allow NULL loop for sync fs requests 2015-08-18 15:39:21 +02:00
benchmark-getaddrinfo.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
benchmark-list.h bench: add 'million async handles' benchmark 2012-12-24 12:19:10 +01:00
benchmark-loop-count.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
benchmark-million-async.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
benchmark-million-timers.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
benchmark-multi-accept.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
benchmark-ping-pongs.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
benchmark-pound.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
benchmark-pump.c test: fix -Wstrict-prototypes warnings 2017-10-05 22:26:55 +02:00
benchmark-sizes.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
benchmark-spawn.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
benchmark-tcp-write-batch.c include: merge uv_tcp_connect and uv_tcp_connect6 2013-09-04 03:16:36 +02:00
benchmark-thread.c Make the thread_create benchmark not time out 2012-03-09 17:53:48 +01:00
benchmark-udp-pummel.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
blackhole-server.c tcp: uv_tcp_dualstack() 2014-01-19 23:07:42 +00:00
dns-server.c tcp: uv_tcp_dualstack() 2014-01-19 23:07:42 +00:00
echo-server.c test,unix: fix race in test runner 2018-10-30 20:44:16 +01:00
run-benchmarks.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
run-tests.c test: change spawn_stdin_stdout return to void 2019-03-16 13:22:56 -04:00
runner-unix.c test,unix: fix race in test runner 2018-10-30 20:44:16 +01:00
runner-unix.h Add copyright headers, license file. 2011-04-18 11:11:30 -07:00
runner-win.c test: fix test runner on MinGW 2019-08-07 14:46:47 -04:00
runner-win.h warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
runner.c test,unix: fix race in test runner 2018-10-30 20:44:16 +01:00
runner.h src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
task.h test: fix gcc 8 warnings for tests 2019-08-06 12:01:15 -04:00
test-active.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-async-null-cb.c sunos: fix cmpxchgi and cmpxchgl type error 2017-07-01 00:24:42 +02:00
test-async.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-barrier.c test: add uv_barrier_wait serial thread test 2018-10-08 11:14:41 +02:00
test-callback-order.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-callback-stack.c src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
test-close-fd.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-close-order.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-condvar.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-connect-unspecified.c test: fix connect_unspecified 2018-03-08 11:37:00 +01:00
test-connection-fail.c src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
test-cwd-and-chdir.c unix: make uv_cwd() report UV_ENOBUFS 2019-06-20 12:04:16 +02:00
test-default-loop-close.c test: add test for closing and recreating default loop 2014-09-15 21:34:09 +02:00
test-delayed-accept.c src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
test-dlerror.c win: include filename in dlopen error message 2017-07-13 23:06:11 +02:00
test-eintr-handling.c Revert "unix,fs: fix for potential partial reads/writes" 2018-01-19 17:51:08 +01:00
test-embed.c build: GNU/kFreeBSD support 2016-08-20 08:55:30 +02:00
test-emfile.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-env-vars.c win: fix reading hidden env vars 2019-09-17 22:07:34 +02:00
test-error.c src: add new error apis to prevent memory leaks 2018-07-06 19:35:21 +02:00
test-fail-always.c Benchmark runner 2011-04-19 04:47:21 +02:00
test-fork.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-fs-copyfile.c unix: update uv_fs_copyfile() fallback logic 2019-10-16 10:49:42 -04:00
test-fs-event.c darwin,test: update loop time after sleeping 2019-10-14 23:52:34 +02:00
test-fs-fd-hash.c win: add UV_FS_O_FILEMAP 2019-07-16 18:20:10 +02:00
test-fs-open-flags.c win: add UV_FS_O_FILEMAP 2019-07-16 18:20:10 +02:00
test-fs-poll.c unix,win: fix uv_fs_poll_stop() when active 2019-05-06 15:02:01 +02:00
test-fs-readdir.c test: fix order of operations in test 2019-10-06 16:07:01 +02:00
test-fs.c test: remove assertion in fs_statfs test 2019-08-20 10:33:32 -04:00
test-get-currentexe.c linux: fix uv_exepath(size=1) UV_EINVAL error 2015-01-03 23:40:31 +01:00
test-get-loadavg.c test: fix -Wtautological-pointer-compare warnings 2015-11-18 22:37:16 +01:00
test-get-memory.c unix,win: add uv_get_constrained_memory() 2019-05-15 11:35:05 -04:00
test-get-passwd.c test: handle root home directories 2016-04-08 11:08:46 -04:00
test-getaddrinfo.c win: fix free() on bad input in uv_getaddrinfo() 2017-01-08 16:29:37 -05:00
test-gethostname.c src,include: define UV_MAXHOSTNAMESIZE 2019-02-05 08:46:28 -05:00
test-getnameinfo.c test: fix -Wtautological-pointer-compare warnings 2015-11-18 22:37:16 +01:00
test-getsockname.c unix, win: add send_queue_size and send_queue_count to uv_udp_t 2014-07-04 18:28:18 +02:00
test-getters-setters.c core: add getter/setter functions for easier ABI compat 2017-12-02 09:51:25 +01:00
test-gettimeofday.c unix,win: introduce uv_timeval64_t 2019-04-11 14:08:17 -04:00
test-handle-fileno.c stream: autodetect direction 2018-09-19 18:19:28 +02:00
test-homedir.c test: handle root home directories 2016-04-08 11:08:46 -04:00
test-hrtime.c test: relax uv_hrtime() test assumptions 2019-02-21 13:02:44 +01:00
test-idle.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
test-idna.c unix,win: support IDNA 2008 in uv_getaddrinfo() 2018-10-30 20:50:23 +01:00
test-ip4-addr.c unix: set sin_len and sin6_len 2019-10-04 23:58:18 +02:00
test-ip6-addr.c unix: set sin_len and sin6_len 2019-10-04 23:58:18 +02:00
test-ipc-heavy-traffic-deadlock-bug.c test: fix test-ipc tests 2019-01-15 09:49:33 +01:00
test-ipc-send-recv.c unix: don't send handle twice on partial write 2018-12-30 20:13:48 +01:00
test-ipc.c test: fix gcc 8 warnings for tests 2019-08-06 12:01:15 -04:00
test-list.h unix,win: add uv_random() 2019-09-18 08:09:14 +02:00
test-loop-alive.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-loop-close.c test: add threadpool init/teardown test 2017-12-06 23:47:38 +01:00
test-loop-configure.c linux: fix epoll_pwait() sigmask size calculation 2014-12-25 14:37:02 +01:00
test-loop-handles.c test: remove call to floor() in test driver 2019-03-16 13:22:56 -04:00
test-loop-stop.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-loop-time.c windows: add uv_backend_timeout 2014-08-04 23:18:38 +02:00
test-multiple-listen.c tcp: uv_tcp_dualstack() 2014-01-19 23:07:42 +00:00
test-mutexes.c unix,win: add uv_mutex_init_recursive() 2017-10-02 10:01:09 -04:00
test-osx-select.c test: remove LOG and LOGF variadic macros 2015-04-12 18:44:34 +02:00
test-pass-always.c Benchmark runner 2011-04-19 04:47:21 +02:00
test-ping-pong.c test: add vectored uv_write() ping-pong tests 2018-05-29 13:01:23 -07:00
test-pipe-bind-error.c test: skip self-connecting tests on cygwin 2017-05-21 16:12:30 +02:00
test-pipe-close-stdout-read-stdin.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-pipe-connect-error.c unix, windows: return error codes directly 2013-07-07 09:51:00 +02:00
test-pipe-connect-multiple.c test: skip self-connecting tests on cygwin 2017-05-21 16:12:30 +02:00
test-pipe-connect-prepare.c unix: don't block for io if any io handle is primed 2015-05-12 07:37:26 +02:00
test-pipe-getsockname.c test: avoid AF_LOCAL 2019-08-01 22:16:31 +02:00
test-pipe-pending-instances.c win: fix setting pipe pending instances after bind 2015-08-24 23:20:35 +02:00
test-pipe-sendmsg.c cygwin: disable non-functional ipc handle send 2017-05-21 16:12:28 +02:00
test-pipe-server-close.c test: skip self-connecting tests on cygwin 2017-05-21 16:12:30 +02:00
test-pipe-set-fchmod.c src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
test-pipe-set-non-blocking.c test: fix race condition in multithreaded test 2015-03-11 15:42:34 +01:00
test-platform-output.c unix,win: add uv_os_uname() 2019-01-14 10:47:20 -05:00
test-poll-close-doesnt-corrupt-stack.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-poll-close.c code style: strip trailing whitespace 2013-12-20 19:38:37 -08:00
test-poll-closesocket.c test: silence build warnings 2016-06-03 01:18:17 +02:00
test-poll-oob.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-poll.c test,sunos: disable UV_DISCONNECT handling 2019-03-16 13:20:31 -04:00
test-process-priority.c test: handle uv_os_setpriority() windows edge case 2018-09-25 20:56:37 -04:00
test-process-title-threadsafe.c darwin: speed up uv_set_process_title() 2019-10-08 12:49:47 +02:00
test-process-title.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-queue-foreach-delete.c test: fix gcc 8 warnings for tests 2019-08-06 12:01:15 -04:00
test-random.c unix,win: add uv_random() 2019-09-18 08:09:14 +02:00
test-ref.c test: factor out fsevents skip explanation 2017-05-21 16:12:08 +02:00
test-run-nowait.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-run-once.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-semaphore.c unix, windows: return error codes directly 2013-07-07 09:51:00 +02:00
test-shutdown-close.c unix, windows: make uv_is_*() always return 0 or 1 2013-09-12 13:30:06 +02:00
test-shutdown-eof.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-shutdown-twice.c unix,test: deadstore fixes 2017-04-05 09:57:20 -04:00
test-signal-multiple-loops.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-signal-pending-on-close.c unix,signal: keep handle active if pending signal 2019-08-19 22:39:06 +02:00
test-signal.c win, process: uv_kill improvements 2017-12-07 14:00:05 +01:00
test-socket-buffer-size.c unix, windows: add uv_recv_buffer_size and uv_send_buffer_size 2014-08-09 11:36:35 +02:00
test-spawn.c test: fix typo in DYLD_LIBRARY_PATH 2019-08-17 16:02:56 +02:00
test-stdio-over-pipes.c test,unix: fix race in test runner 2018-10-30 20:44:16 +01:00
test-strscpy.c unix: harden string copying, introduce strscpy() 2018-12-04 17:08:09 +01:00
test-tcp-alloc-cb-fail.c unix,win: make on_alloc_cb failures more resilient 2016-08-17 09:57:55 +02:00
test-tcp-bind6-error.c test: skip ipv6 tests when ipv6 is not supported 2014-12-29 17:14:48 +01:00
test-tcp-bind-error.c tcp: add uv_tcp_close_reset method 2019-08-19 23:41:15 +02:00
test-tcp-close-accept.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-tcp-close-reset.c test: fix -Wsign-compare warning 2019-09-06 22:48:06 +02:00
test-tcp-close-while-connecting.c test: fix tcp_close_while_connecting CI failures 2016-10-14 01:57:15 +02:00
test-tcp-close.c tcp: uv_tcp_dualstack() 2014-01-19 23:07:42 +00:00
test-tcp-connect6-error.c include: merge uv_tcp_connect and uv_tcp_connect6 2013-09-04 03:16:36 +02:00
test-tcp-connect-error-after-write.c include: merge uv_tcp_connect and uv_tcp_connect6 2013-09-04 03:16:36 +02:00
test-tcp-connect-error.c include: merge uv_tcp_connect and uv_tcp_connect6 2013-09-04 03:16:36 +02:00
test-tcp-connect-timeout.c tests: skip some tests when network is unreachable 2015-07-13 10:28:46 +02:00
test-tcp-create-socket-early.c cygwin: implement support for cygwin and msys2 2017-05-21 16:12:21 +02:00
test-tcp-flags.c unix, windows: rename uv_run2 to uv_run 2013-01-16 23:35:29 +01:00
test-tcp-oob.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-tcp-open.c test: fix warning in test-tcp-open 2018-08-16 10:28:49 +02:00
test-tcp-read-stop.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-tcp-shutdown-after-write.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-tcp-try-write-error.c test: allow UV_ECONNRESET in tcp_try_write_error 2019-06-27 17:23:53 -04:00
test-tcp-try-write.c stream: support empty uv_try_write on unix 2015-10-04 18:06:08 -04:00
test-tcp-unexpected-read.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-tcp-write-after-connect.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-tcp-write-fail.c win, test: fix compilation warning 2015-09-29 09:57:27 +02:00
test-tcp-write-queue-order.c test: increase connection timeout to 1 second 2018-03-31 17:05:26 -04:00
test-tcp-write-to-half-open-connection.c tcp: uv_tcp_dualstack() 2014-01-19 23:07:42 +00:00
test-tcp-writealot.c test: fix test-tcp-writealot flakiness on arm 2016-09-12 08:33:41 +02:00
test-thread-equal.c unix, windows: add uv_thread_equal 2014-10-20 09:51:49 +02:00
test-thread.c thread: allow specifying stack size for new thread 2019-02-08 21:15:01 +01:00
test-threadpool-cancel.c unix,win: add uv_random() 2019-09-18 08:09:14 +02:00
test-threadpool.c unix, windows: return error codes directly 2013-07-07 09:51:00 +02:00
test-timer-again.c src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
test-timer-from-check.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-timer.c timer: fix uv_timer_start on closing timer 2019-08-23 20:42:37 +02:00
test-tmpdir.c win: fix uv_os_tmpdir when env var is 260 chars 2019-07-03 14:18:04 +02:00
test-tty-duplicate-key.c win: fix duplicate tty vt100 fn key 2019-02-10 10:04:18 -05:00
test-tty.c warnings: fix code that emits compiler warnings 2018-11-29 11:21:44 -05:00
test-udp-alloc-cb-fail.c src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
test-udp-bind.c unix, windows: do not set SO_REUSEADDR by default on udp 2014-04-02 01:21:35 +02:00
test-udp-connect.c udp: add support for UDP connected sockets 2019-03-16 12:05:37 -04:00
test-udp-create-socket-early.c cygwin: implement support for cygwin and msys2 2017-05-21 16:12:21 +02:00
test-udp-dgram-too-big.c include: merge uv_udp_send and uv_udp_send6 2013-09-04 03:17:29 +02:00
test-udp-ipv6.c test,openbsd: use RETURN_SKIP in UDP IPv6 tests 2018-04-17 11:48:55 +02:00
test-udp-multicast-interface6.c build: GNU/kFreeBSD support 2016-08-20 08:55:30 +02:00
test-udp-multicast-interface.c test: allow multicast not permitted status 2018-01-09 14:32:35 +01:00
test-udp-multicast-join6.c test: add specific source multicast tests 2019-08-23 21:12:58 +02:00
test-udp-multicast-join.c test: add specific source multicast tests 2019-08-23 21:12:58 +02:00
test-udp-multicast-ttl.c test: allow multicast not permitted status 2018-01-09 14:32:35 +01:00
test-udp-open.c unix: support sockaddr_un in uv_udp_send() 2019-04-11 11:04:43 -04:00
test-udp-options.c win: allow setting udp socket options before bind 2018-06-04 09:19:06 -04:00
test-udp-send-and-recv.c src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
test-udp-send-hang-loop.c test: allow net unreachable status in udp test 2018-01-09 15:09:46 +01:00
test-udp-send-immediate.c src,test: fix idiosyncratic comment style 2018-05-29 11:56:49 -07:00
test-udp-send-unreachable.c windows: fix buffer leak after failed udp send 2014-08-28 08:41:43 +02:00
test-udp-try-send.c win,udp: implements uv_udp_try_send 2017-07-01 17:20:15 +02:00
test-uname.c unix,win: add uv_os_uname() 2019-01-14 10:47:20 -05:00
test-walk-handles.c unix, windows: removed unused status parameter 2014-03-17 21:42:36 +01:00
test-watcher-cross-stop.c cygwin: implement support for cygwin and msys2 2017-05-21 16:12:21 +02:00
test.gyp build: remove duplicated test in build files 2019-10-07 22:12:29 -04:00