Hash :
0ac98783
Author :
Date :
2022-01-14T17:27:51
copy-file-range: work around Linux kernel bug This workaround is adapted from Coreutils. * lib/copy-file-range.c [__linux__ && HAVE_COPY_FILE_RANGE]: Include <sys/utsname.h>. (copy_file_range): Use a stub to replace the copy_file_range of Linux kernel versions 4.5 through 5.2. * lib/unistd.in.h (copy_file_range): * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): * modules/copy-file-range (configure.ac): * modules/unistd (unistd.h): Support replacement of copy_file_range. * m4/copy-file-range.m4 (gl_FUNC_COPY_FILE_RANGE): Define HAVE_COPY_FILE_RANGE if the system has copy_file_range, and on Linux check whether the system’s is known to work.
@node copy_file_range
@subsection @code{copy_file_range}
@findex copy_file_range
Documentation:
@itemize
@item
@ifinfo
@ref{Copying File Data,,Copying data between two files,libc},
@end ifinfo
@ifnotinfo
@url{https://www.gnu.org/software/libc/manual/html_node/Copying-File-Data.html},
@end ifnotinfo
@item
@uref{https://www.kernel.org/doc/man-pages/online/pages/man2/copy_file_range.2.html,,man copy_file_range}.
@end itemize
Gnulib module: copy-file-range
Portability problems fixed by Gnulib:
@itemize
@item
This function exists only on Linux and FreeBSD and is therefore
missing on many non-glibc platforms:
glibc 2.26, macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0.
But the replacement function is only a stub: It always fails with error ENOSYS.
@item
This function has many problems on Linux kernel versions before 5.3.
On these kernel versions, the replacement function always fails with
error ENOSYS.
@end itemize
Portability problems not fixed by Gnulib:
@itemize
@end itemize