Page MenuHomeFreeBSD

D28959.diff
No OneTemporary

D28959.diff

Index: bin/cp/utils.c
===================================================================
--- bin/cp/utils.c
+++ bin/cp/utils.c
@@ -237,9 +237,48 @@
if (use_copy_file_range) {
rcount = copy_file_range(from_fd, NULL,
to_fd, NULL, SSIZE_MAX, 0);
- if (rcount < 0 && errno == EINVAL) {
+ if (rcount < 0) {
+ switch (errno) {
+ case EINVAL:
/* Prob a non-seekable FD */
- use_copy_file_range = 0;
+ /* fallthrough */
+ case ENOSYS:
+ /* Earlier OS version */
+ /* fallthrough */
+ case EXDEV:
+ /* different devices */
+ use_copy_file_range = 0;
+ break;
+
+ case ENOSPC:
+ break;
+ case EDQUOT:
+ break;
+ case EFBIG:
+ break;
+ case EROFS:
+ break;
+ case EINTR:
+ break;
+ case EBUSY:
+ break;
+ case ENOBUFS:
+ break;
+ case ENOMEM:
+ break;
+ case EINTEGRITY:
+ break;
+ case EIO:
+ break;
+ case EBADF:
+ break;
+ case EISDIR:
+ break;
+
+ /* fallback for safety */
+ default:
+ use_copy_file_range = 0;
+ }
}
}
if (!use_copy_file_range)

File Metadata

Mime Type
text/plain
Expires
Sat, Oct 5, 10:28 PM (21 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13682464
Default Alt Text
D28959.diff (1 KB)

Event Timeline