From 152bb49b118bc9e3ddb33c6263d8ecadb71c24d2 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 4 Sep 2022 07:53:39 +0100 Subject: [PATCH] linux add FICLONE* ioctl. --- libc-test/semver/linux-gnu-x86_64.txt | 2 ++ libc-test/semver/linux.txt | 1 + src/unix/linux_like/linux/arch/generic/mod.rs | 7 +++++++ src/unix/linux_like/linux/mod.rs | 7 +++++++ src/unix/linux_like/linux/musl/b32/mod.rs | 1 + src/unix/linux_like/linux/musl/b64/aarch64/mod.rs | 1 + src/unix/linux_like/linux/musl/b64/mips64.rs | 1 + src/unix/linux_like/linux/musl/b64/powerpc64.rs | 1 + src/unix/linux_like/linux/musl/b64/riscv64/mod.rs | 1 + src/unix/linux_like/linux/musl/b64/s390x.rs | 1 + src/unix/linux_like/linux/musl/b64/x86_64/mod.rs | 1 + src/unix/linux_like/linux/uclibc/arm/mod.rs | 1 + src/unix/linux_like/linux/uclibc/x86_64/mod.rs | 1 + 13 files changed, 26 insertions(+) diff --git a/libc-test/semver/linux-gnu-x86_64.txt b/libc-test/semver/linux-gnu-x86_64.txt index c729f6ad26277..dfe109307fbd1 100644 --- a/libc-test/semver/linux-gnu-x86_64.txt +++ b/libc-test/semver/linux-gnu-x86_64.txt @@ -1,3 +1,5 @@ +FICLONE +FICLONERANGE KEYCTL_CAPABILITIES KEYCTL_CAPS0_BIG_KEY KEYCTL_CAPS0_CAPABILITIES diff --git a/libc-test/semver/linux.txt b/libc-test/semver/linux.txt index 356107bd4daf2..dc4bead28d4e1 100644 --- a/libc-test/semver/linux.txt +++ b/libc-test/semver/linux.txt @@ -2909,6 +2909,7 @@ ff_rumble_effect ff_trigger fgetpos64 fgetxattr +file_clone_range flistxattr fmemopen fopen64 diff --git a/src/unix/linux_like/linux/arch/generic/mod.rs b/src/unix/linux_like/linux/arch/generic/mod.rs index 320579955367c..5265cdd173e7f 100644 --- a/src/unix/linux_like/linux/arch/generic/mod.rs +++ b/src/unix/linux_like/linux/arch/generic/mod.rs @@ -104,6 +104,13 @@ cfg_if! { pub const SO_DETACH_REUSEPORT_BPF: ::c_int = 68; } } + +cfg_if! { + if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] { + pub const FICLONE: ::c_ulong = 0x40049409; + pub const FICLONERANGE: ::c_ulong = 0x4020940D; + } +} // pub const SO_PREFER_BUSY_POLL: ::c_int = 69; // pub const SO_BUSY_POLL_BUDGET: ::c_int = 70; diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index 512d5f0ffb6e3..43f6399e442b3 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -596,6 +596,13 @@ s! { pub nla_len: u16, pub nla_type: u16, } + + pub struct file_clone_range { + pub src_fd: ::__s64, + pub src_offset: ::__u64, + pub src_length: ::__u64, + pub dest_offset: ::__u64, + } } s_no_extra_traits! { diff --git a/src/unix/linux_like/linux/musl/b32/mod.rs b/src/unix/linux_like/linux/musl/b32/mod.rs index 6d2ecf2d83538..63824fbf561e4 100644 --- a/src/unix/linux_like/linux/musl/b32/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/mod.rs @@ -3,6 +3,7 @@ pub type c_ulong = u32; pub type nlink_t = u32; pub type blksize_t = ::c_long; pub type __u64 = ::c_ulonglong; +pub type __s64 = ::c_longlong; pub type regoff_t = ::c_int; s! { diff --git a/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs b/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs index 845707dcd9ab5..4efa0768f70a1 100644 --- a/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs @@ -1,5 +1,6 @@ pub type c_char = u8; pub type __u64 = ::c_ulonglong; +pub type __s64 = ::c_longlong; pub type wchar_t = u32; pub type nlink_t = u32; pub type blksize_t = ::c_int; diff --git a/src/unix/linux_like/linux/musl/b64/mips64.rs b/src/unix/linux_like/linux/musl/b64/mips64.rs index 1ed13f66bf2fe..a11feaff6eae2 100644 --- a/src/unix/linux_like/linux/musl/b64/mips64.rs +++ b/src/unix/linux_like/linux/musl/b64/mips64.rs @@ -1,6 +1,7 @@ pub type c_char = i8; pub type wchar_t = i32; pub type __u64 = ::c_ulong; +pub type __s64 = ::c_long; pub type nlink_t = u64; pub type blksize_t = i64; diff --git a/src/unix/linux_like/linux/musl/b64/powerpc64.rs b/src/unix/linux_like/linux/musl/b64/powerpc64.rs index f17d72cb14fdb..5f391df6ca395 100644 --- a/src/unix/linux_like/linux/musl/b64/powerpc64.rs +++ b/src/unix/linux_like/linux/musl/b64/powerpc64.rs @@ -1,6 +1,7 @@ pub type c_char = u8; pub type wchar_t = i32; pub type __u64 = ::c_ulong; +pub type __s64 = ::c_long; pub type nlink_t = u64; pub type blksize_t = ::c_long; diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs index fcb28c3cf29f5..f354293e0d05c 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -8,6 +8,7 @@ pub type blksize_t = ::c_int; pub type fsblkcnt64_t = ::c_ulong; pub type fsfilcnt64_t = ::c_ulong; pub type __u64 = ::c_ulonglong; +pub type __s64 = ::c_longlong; s! { pub struct pthread_attr_t { diff --git a/src/unix/linux_like/linux/musl/b64/s390x.rs b/src/unix/linux_like/linux/musl/b64/s390x.rs index cb6237abcfaf2..df3024bf4cc12 100644 --- a/src/unix/linux_like/linux/musl/b64/s390x.rs +++ b/src/unix/linux_like/linux/musl/b64/s390x.rs @@ -4,6 +4,7 @@ pub type nlink_t = u64; pub type wchar_t = i32; pub type greg_t = u64; pub type __u64 = u64; +pub type __s64 = i64; s! { pub struct ipc_perm { diff --git a/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs b/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs index 3429c2c1a7822..d867354ff4638 100644 --- a/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs @@ -3,6 +3,7 @@ pub type wchar_t = i32; pub type nlink_t = u64; pub type blksize_t = ::c_long; pub type __u64 = ::c_ulonglong; +pub type __s64 = ::c_longlong; pub type greg_t = i64; s! { diff --git a/src/unix/linux_like/linux/uclibc/arm/mod.rs b/src/unix/linux_like/linux/uclibc/arm/mod.rs index e0279574b9921..a0035b277e2b7 100644 --- a/src/unix/linux_like/linux/uclibc/arm/mod.rs +++ b/src/unix/linux_like/linux/uclibc/arm/mod.rs @@ -19,6 +19,7 @@ pub type blkcnt_t = ::c_long; pub type fsblkcnt64_t = u64; pub type fsfilcnt64_t = u64; pub type __u64 = ::c_ulonglong; +pub type __s64 = ::c_longlong; s! { pub struct cmsghdr { diff --git a/src/unix/linux_like/linux/uclibc/x86_64/mod.rs b/src/unix/linux_like/linux/uclibc/x86_64/mod.rs index 529711fcec127..43ac79296b368 100644 --- a/src/unix/linux_like/linux/uclibc/x86_64/mod.rs +++ b/src/unix/linux_like/linux/uclibc/x86_64/mod.rs @@ -20,6 +20,7 @@ pub type wchar_t = ::c_int; pub type fsblkcnt64_t = u64; pub type fsfilcnt64_t = u64; pub type __u64 = ::c_ulong; +pub type __s64 = ::c_long; s! { pub struct ipc_perm {