From c8539f5bc6061c41a56d13451297fb9d5a258c59 Mon Sep 17 00:00:00 2001 From: Nicolas Thery Date: Sat, 17 Apr 2021 09:29:33 +0200 Subject: [PATCH] Add macos clonefile functions --- libc-test/build.rs | 2 ++ libc-test/semver/apple.txt | 3 +++ src/unix/bsd/apple/mod.rs | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/libc-test/build.rs b/libc-test/build.rs index a39c1ce9..446f1559 100755 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -217,6 +217,8 @@ fn test_apple(target: &str) { "stdio.h", "stdlib.h", "string.h", + "sys/attr.h", + "sys/clonefile.h", "sys/event.h", "sys/file.h", "sys/ioctl.h", diff --git a/libc-test/semver/apple.txt b/libc-test/semver/apple.txt index 6fe47de1..d860f57d 100644 --- a/libc-test/semver/apple.txt +++ b/libc-test/semver/apple.txt @@ -1514,6 +1514,8 @@ chflags chroot clearerr clock_getres +clonefile +clonefileat cmsghdr connectx cpu_subtype_t @@ -1531,6 +1533,7 @@ exchangedata faccessat fchdir fchflags +fclonefileat fdopendir fgetxattr flistxattr diff --git a/src/unix/bsd/apple/mod.rs b/src/unix/bsd/apple/mod.rs index 6d776924..a5703ef5 100644 --- a/src/unix/bsd/apple/mod.rs +++ b/src/unix/bsd/apple/mod.rs @@ -3835,6 +3835,24 @@ extern "C" { outbytesleft: *mut ::size_t, ) -> ::size_t; pub fn iconv_close(cd: iconv_t) -> ::c_int; + + // Copy-on-write functions. + // According to the man page `flags` is an `int` but in the header + // this is a `uint32_t`. + pub fn clonefile(src: *const ::c_char, dst: *const ::c_char, flags: u32) -> ::c_int; + pub fn clonefileat( + src_dirfd: ::c_int, + src: *const ::c_char, + dst_dirfd: ::c_int, + dst: *const ::c_char, + flags: u32, + ) -> ::c_int; + pub fn fclonefileat( + srcfd: ::c_int, + dst_dirfd: ::c_int, + dst: *const ::c_char, + flags: u32, + ) -> ::c_int; } cfg_if! {