1 use crate::fs::CopyfileFlags;
2 use crate::{backend, io};
3 use backend::fd::AsFd;
4 use backend::fs::types::copyfile_state_t;
5 
6 /// `fcopyfile(from, to, state, flags)`
7 ///
8 /// # Safety
9 ///
10 /// The `state` operand must be allocated with `copyfile_state_alloc` and not
11 /// yet freed with `copyfile_state_free`.
12 ///
13 /// # References
14 ///  - [Apple]
15 ///
16 /// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/fcopyfile.3.html
17 #[inline]
fcopyfile<FromFd: AsFd, ToFd: AsFd>( from: FromFd, to: ToFd, state: copyfile_state_t, flags: CopyfileFlags, ) -> io::Result<()>18 pub unsafe fn fcopyfile<FromFd: AsFd, ToFd: AsFd>(
19     from: FromFd,
20     to: ToFd,
21     state: copyfile_state_t,
22     flags: CopyfileFlags,
23 ) -> io::Result<()> {
24     backend::fs::syscalls::fcopyfile(from.as_fd(), to.as_fd(), state, flags)
25 }
26 
27 /// `copyfile_state_alloc()`
28 ///
29 /// # References
30 ///  - [Apple]
31 ///
32 /// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/fcopyfile.3.html
33 #[inline]
copyfile_state_alloc() -> io::Result<copyfile_state_t>34 pub fn copyfile_state_alloc() -> io::Result<copyfile_state_t> {
35     backend::fs::syscalls::copyfile_state_alloc()
36 }
37 
38 /// `copyfile_state_free(state)`
39 ///
40 /// # Safety
41 ///
42 /// The `state` operand must be allocated with `copyfile_state_alloc` and not
43 /// yet freed with `copyfile_state_free`.
44 ///
45 /// # References
46 ///  - [Apple]
47 ///
48 /// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/fcopyfile.3.html
49 #[inline]
copyfile_state_free(state: copyfile_state_t) -> io::Result<()>50 pub unsafe fn copyfile_state_free(state: copyfile_state_t) -> io::Result<()> {
51     backend::fs::syscalls::copyfile_state_free(state)
52 }
53 
54 /// `copyfile_state_get(state, COPYFILE_STATE_COPIED)`
55 ///
56 /// # Safety
57 ///
58 /// The `state` operand must be allocated with `copyfile_state_alloc` and not
59 /// yet freed with `copyfile_state_free`.
60 ///
61 /// # References
62 ///  - [Apple]
63 ///
64 /// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/fcopyfile.3.html
65 #[inline]
copyfile_state_get_copied(state: copyfile_state_t) -> io::Result<u64>66 pub unsafe fn copyfile_state_get_copied(state: copyfile_state_t) -> io::Result<u64> {
67     backend::fs::syscalls::copyfile_state_get_copied(state)
68 }
69 
70 /// `copyfile_state_get(state, flags, dst)`
71 ///
72 /// # Safety
73 ///
74 /// The `state` operand must be allocated with `copyfile_state_alloc` and not
75 /// yet freed with `copyfile_state_free`.
76 ///
77 /// # References
78 ///  - [Apple]
79 ///
80 /// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/fcopyfile.3.html
81 #[inline]
copyfile_state_get( state: copyfile_state_t, flag: u32, dst: *mut core::ffi::c_void, ) -> io::Result<()>82 pub unsafe fn copyfile_state_get(
83     state: copyfile_state_t,
84     flag: u32,
85     dst: *mut core::ffi::c_void,
86 ) -> io::Result<()> {
87     backend::fs::syscalls::copyfile_state_get(state, flag, dst)
88 }
89