mirror of
https://github.com/systemd/systemd.git
synced 2025-03-21 02:50:18 +03:00
basic/missing: add copy_file_range
syscall numbers based on: https://fedora.juszkiewicz.com.pl/syscalls.html
This commit is contained in:
parent
7a827fcb11
commit
1d4b557d1b
15
configure.ac
15
configure.ac
@ -296,8 +296,19 @@ LIBS="$save_LIBS"
|
||||
AC_SUBST(CAP_LIBS)
|
||||
|
||||
AC_CHECK_FUNCS([__secure_getenv secure_getenv])
|
||||
AC_CHECK_DECLS([memfd_create, gettid, pivot_root, name_to_handle_at, setns, getrandom, renameat2, kcmp, keyctl, LO_FLAGS_PARTSCAN],
|
||||
[], [], [[
|
||||
AC_CHECK_DECLS([
|
||||
memfd_create,
|
||||
gettid,
|
||||
pivot_root,
|
||||
name_to_handle_at,
|
||||
setns,
|
||||
getrandom,
|
||||
renameat2,
|
||||
kcmp,
|
||||
keyctl,
|
||||
LO_FLAGS_PARTSCAN,
|
||||
copy_file_range],
|
||||
[], [], [[
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mount.h>
|
||||
|
@ -1177,3 +1177,33 @@ static inline key_serial_t request_key(const char *type, const char *description
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef __NR_copy_file_range
|
||||
# if defined(__x86_64__)
|
||||
# define __NR_copy_file_range 326
|
||||
# elif defined(__i386__)
|
||||
# define __NR_copy_file_range 377
|
||||
# elif defined __s390__
|
||||
# define __NR_copy_file_range 375
|
||||
# elif defined __arm__
|
||||
# define __NR_copy_file_range 391
|
||||
# elif defined __aarch64__
|
||||
# define __NR_copy_file_range 285
|
||||
# else
|
||||
# warning "__NR_copy_file_range not defined for your architecture"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !HAVE_DECL_COPY_FILE_RANGE
|
||||
static inline ssize_t copy_file_range(int fd_in, loff_t *off_in,
|
||||
int fd_out, loff_t *off_out,
|
||||
size_t len,
|
||||
unsigned int flags) {
|
||||
#ifdef __NR_copy_file_range
|
||||
return syscall(__NR_copy_file_range, fd_in, off_in, fd_out, off_out, len, flags);
|
||||
#else
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user