1 //! linux_raw syscalls supporting `rustix::mount`.
2 //!
3 //! # Safety
4 //!
5 //! See the `rustix::backend` module documentation for details.
6 #![allow(unsafe_code)]
7 #![allow(clippy::undocumented_unsafe_blocks)]
8
9 use crate::backend::conv::ret;
10 #[cfg(feature = "mount")]
11 use crate::backend::conv::{ret_owned_fd, slice, zero};
12 #[cfg(feature = "mount")]
13 use crate::fd::{BorrowedFd, OwnedFd};
14 use crate::ffi::CStr;
15 use crate::io;
16
17 #[inline]
mount( source: Option<&CStr>, target: &CStr, file_system_type: Option<&CStr>, flags: super::types::MountFlagsArg, data: Option<&CStr>, ) -> io::Result<()>18 pub(crate) fn mount(
19 source: Option<&CStr>,
20 target: &CStr,
21 file_system_type: Option<&CStr>,
22 flags: super::types::MountFlagsArg,
23 data: Option<&CStr>,
24 ) -> io::Result<()> {
25 unsafe {
26 ret(syscall_readonly!(
27 __NR_mount,
28 source,
29 target,
30 file_system_type,
31 flags,
32 data
33 ))
34 }
35 }
36
37 #[inline]
unmount(target: &CStr, flags: super::types::UnmountFlags) -> io::Result<()>38 pub(crate) fn unmount(target: &CStr, flags: super::types::UnmountFlags) -> io::Result<()> {
39 unsafe { ret(syscall_readonly!(__NR_umount2, target, flags)) }
40 }
41
42 #[cfg(feature = "mount")]
43 #[inline]
fsopen(fs_name: &CStr, flags: super::types::FsOpenFlags) -> io::Result<OwnedFd>44 pub(crate) fn fsopen(fs_name: &CStr, flags: super::types::FsOpenFlags) -> io::Result<OwnedFd> {
45 unsafe { ret_owned_fd(syscall_readonly!(__NR_fsopen, fs_name, flags)) }
46 }
47
48 #[cfg(feature = "mount")]
49 #[inline]
fsmount( fs_fd: BorrowedFd<'_>, flags: super::types::FsMountFlags, attr_flags: super::types::MountAttrFlags, ) -> io::Result<OwnedFd>50 pub(crate) fn fsmount(
51 fs_fd: BorrowedFd<'_>,
52 flags: super::types::FsMountFlags,
53 attr_flags: super::types::MountAttrFlags,
54 ) -> io::Result<OwnedFd> {
55 unsafe { ret_owned_fd(syscall_readonly!(__NR_fsmount, fs_fd, flags, attr_flags)) }
56 }
57
58 #[cfg(feature = "mount")]
59 #[inline]
move_mount( from_dfd: BorrowedFd<'_>, from_pathname: &CStr, to_dfd: BorrowedFd<'_>, to_pathname: &CStr, flags: super::types::MoveMountFlags, ) -> io::Result<()>60 pub(crate) fn move_mount(
61 from_dfd: BorrowedFd<'_>,
62 from_pathname: &CStr,
63 to_dfd: BorrowedFd<'_>,
64 to_pathname: &CStr,
65 flags: super::types::MoveMountFlags,
66 ) -> io::Result<()> {
67 unsafe {
68 ret(syscall_readonly!(
69 __NR_move_mount,
70 from_dfd,
71 from_pathname,
72 to_dfd,
73 to_pathname,
74 flags
75 ))
76 }
77 }
78
79 #[cfg(feature = "mount")]
80 #[inline]
open_tree( dfd: BorrowedFd<'_>, filename: &CStr, flags: super::types::OpenTreeFlags, ) -> io::Result<OwnedFd>81 pub(crate) fn open_tree(
82 dfd: BorrowedFd<'_>,
83 filename: &CStr,
84 flags: super::types::OpenTreeFlags,
85 ) -> io::Result<OwnedFd> {
86 unsafe { ret_owned_fd(syscall_readonly!(__NR_open_tree, dfd, filename, flags)) }
87 }
88
89 #[cfg(feature = "mount")]
90 #[inline]
fspick( dfd: BorrowedFd<'_>, path: &CStr, flags: super::types::FsPickFlags, ) -> io::Result<OwnedFd>91 pub(crate) fn fspick(
92 dfd: BorrowedFd<'_>,
93 path: &CStr,
94 flags: super::types::FsPickFlags,
95 ) -> io::Result<OwnedFd> {
96 unsafe { ret_owned_fd(syscall_readonly!(__NR_fspick, dfd, path, flags)) }
97 }
98
99 #[cfg(feature = "mount")]
100 #[inline]
fsconfig_set_flag(fs_fd: BorrowedFd<'_>, key: &CStr) -> io::Result<()>101 pub(crate) fn fsconfig_set_flag(fs_fd: BorrowedFd<'_>, key: &CStr) -> io::Result<()> {
102 unsafe {
103 ret(syscall_readonly!(
104 __NR_fsconfig,
105 fs_fd,
106 super::types::FsConfigCmd::SetFlag,
107 key,
108 zero(),
109 zero()
110 ))
111 }
112 }
113
114 #[cfg(feature = "mount")]
115 #[inline]
fsconfig_set_string( fs_fd: BorrowedFd<'_>, key: &CStr, value: &CStr, ) -> io::Result<()>116 pub(crate) fn fsconfig_set_string(
117 fs_fd: BorrowedFd<'_>,
118 key: &CStr,
119 value: &CStr,
120 ) -> io::Result<()> {
121 unsafe {
122 ret(syscall_readonly!(
123 __NR_fsconfig,
124 fs_fd,
125 super::types::FsConfigCmd::SetString,
126 key,
127 value,
128 zero()
129 ))
130 }
131 }
132
133 #[cfg(feature = "mount")]
134 #[inline]
fsconfig_set_binary( fs_fd: BorrowedFd<'_>, key: &CStr, value: &[u8], ) -> io::Result<()>135 pub(crate) fn fsconfig_set_binary(
136 fs_fd: BorrowedFd<'_>,
137 key: &CStr,
138 value: &[u8],
139 ) -> io::Result<()> {
140 let (value_addr, value_len) = slice(value);
141 unsafe {
142 ret(syscall_readonly!(
143 __NR_fsconfig,
144 fs_fd,
145 super::types::FsConfigCmd::SetBinary,
146 key,
147 value_addr,
148 value_len
149 ))
150 }
151 }
152
153 #[cfg(feature = "mount")]
154 #[inline]
fsconfig_set_fd( fs_fd: BorrowedFd<'_>, key: &CStr, fd: BorrowedFd<'_>, ) -> io::Result<()>155 pub(crate) fn fsconfig_set_fd(
156 fs_fd: BorrowedFd<'_>,
157 key: &CStr,
158 fd: BorrowedFd<'_>,
159 ) -> io::Result<()> {
160 unsafe {
161 ret(syscall_readonly!(
162 __NR_fsconfig,
163 fs_fd,
164 super::types::FsConfigCmd::SetFd,
165 key,
166 zero(),
167 fd
168 ))
169 }
170 }
171
172 #[cfg(feature = "mount")]
173 #[inline]
fsconfig_set_path( fs_fd: BorrowedFd<'_>, key: &CStr, path: &CStr, fd: BorrowedFd<'_>, ) -> io::Result<()>174 pub(crate) fn fsconfig_set_path(
175 fs_fd: BorrowedFd<'_>,
176 key: &CStr,
177 path: &CStr,
178 fd: BorrowedFd<'_>,
179 ) -> io::Result<()> {
180 unsafe {
181 ret(syscall_readonly!(
182 __NR_fsconfig,
183 fs_fd,
184 super::types::FsConfigCmd::SetPath,
185 key,
186 path,
187 fd
188 ))
189 }
190 }
191
192 #[cfg(feature = "mount")]
193 #[inline]
fsconfig_set_path_empty( fs_fd: BorrowedFd<'_>, key: &CStr, fd: BorrowedFd<'_>, ) -> io::Result<()>194 pub(crate) fn fsconfig_set_path_empty(
195 fs_fd: BorrowedFd<'_>,
196 key: &CStr,
197 fd: BorrowedFd<'_>,
198 ) -> io::Result<()> {
199 unsafe {
200 ret(syscall_readonly!(
201 __NR_fsconfig,
202 fs_fd,
203 super::types::FsConfigCmd::SetPathEmpty,
204 key,
205 cstr!(""),
206 fd
207 ))
208 }
209 }
210
211 #[cfg(feature = "mount")]
212 #[inline]
fsconfig_create(fs_fd: BorrowedFd<'_>) -> io::Result<()>213 pub(crate) fn fsconfig_create(fs_fd: BorrowedFd<'_>) -> io::Result<()> {
214 unsafe {
215 ret(syscall_readonly!(
216 __NR_fsconfig,
217 fs_fd,
218 super::types::FsConfigCmd::Create,
219 zero(),
220 zero(),
221 zero()
222 ))
223 }
224 }
225
226 #[cfg(feature = "mount")]
227 #[inline]
fsconfig_reconfigure(fs_fd: BorrowedFd<'_>) -> io::Result<()>228 pub(crate) fn fsconfig_reconfigure(fs_fd: BorrowedFd<'_>) -> io::Result<()> {
229 unsafe {
230 ret(syscall_readonly!(
231 __NR_fsconfig,
232 fs_fd,
233 super::types::FsConfigCmd::Reconfigure,
234 zero(),
235 zero(),
236 zero()
237 ))
238 }
239 }
240