//! `fsopen` and related functions in Linux's `mount` API. use crate::backend::mount::types::{ FsMountFlags, FsOpenFlags, FsPickFlags, MountAttrFlags, MoveMountFlags, OpenTreeFlags, }; use crate::fd::{BorrowedFd, OwnedFd}; use crate::{backend, io, path}; /// `fsopen(fs_name, flags)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsopen.md #[inline] pub fn fsopen(fs_name: Fs, flags: FsOpenFlags) -> io::Result { fs_name.into_with_c_str(|fs_name| backend::mount::syscalls::fsopen(fs_name, flags)) } /// `fsmount(fs_fd, flags, attr_flags)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsmount.md #[inline] pub fn fsmount( fs_fd: BorrowedFd<'_>, flags: FsMountFlags, attr_flags: MountAttrFlags, ) -> io::Result { backend::mount::syscalls::fsmount(fs_fd, flags, attr_flags) } /// `move_mount(from_dfd, from_pathname, to_dfd, to_pathname, flags)` /// /// This is not the same as `mount` with the `MS_MOVE` flag. If you want to /// use that, use [`mount_move`] instead. /// /// # References /// - [Unfinished draft] /// /// [`mount_move`]: crate::mount::mount_move /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/move_mount.md #[inline] pub fn move_mount( from_dfd: BorrowedFd<'_>, from_pathname: From, to_dfd: BorrowedFd<'_>, to_pathname: To, flags: MoveMountFlags, ) -> io::Result<()> { from_pathname.into_with_c_str(|from_pathname| { to_pathname.into_with_c_str(|to_pathname| { backend::mount::syscalls::move_mount( from_dfd, from_pathname, to_dfd, to_pathname, flags, ) }) }) } /// `open_tree(dfd, filename, flags)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/open_tree.md #[inline] pub fn open_tree( dfd: BorrowedFd<'_>, filename: Path, flags: OpenTreeFlags, ) -> io::Result { filename.into_with_c_str(|filename| backend::mount::syscalls::open_tree(dfd, filename, flags)) } /// `fspick(dfd, path, flags)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fspick.md #[inline] pub fn fspick( dfd: BorrowedFd<'_>, path: Path, flags: FsPickFlags, ) -> io::Result { path.into_with_c_str(|path| backend::mount::syscalls::fspick(dfd, path, flags)) } /// `fsconfig(fs_fd, FSCONFIG_SET_FLAG, key, NULL, 0)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsconfig.md #[inline] #[doc(alias = "fsconfig")] pub fn fsconfig_set_flag(fs_fd: BorrowedFd<'_>, key: Key) -> io::Result<()> { key.into_with_c_str(|key| backend::mount::syscalls::fsconfig_set_flag(fs_fd, key)) } /// `fsconfig(fs_fd, FSCONFIG_SET_STRING, key, value, 0)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsconfig.md #[inline] #[doc(alias = "fsconfig")] pub fn fsconfig_set_string( fs_fd: BorrowedFd<'_>, key: Key, value: Value, ) -> io::Result<()> { key.into_with_c_str(|key| { value.into_with_c_str(|value| { backend::mount::syscalls::fsconfig_set_string(fs_fd, key, value) }) }) } /// `fsconfig(fs_fd, FSCONFIG_SET_BINARY, key, value, value.len())` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsconfig.md #[inline] #[doc(alias = "fsconfig")] pub fn fsconfig_set_binary( fs_fd: BorrowedFd<'_>, key: Key, value: &[u8], ) -> io::Result<()> { key.into_with_c_str(|key| backend::mount::syscalls::fsconfig_set_binary(fs_fd, key, value)) } /// `fsconfig(fs_fd, FSCONFIG_SET_PATH, key, path, fd)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsconfig.md #[inline] #[doc(alias = "fsconfig")] pub fn fsconfig_set_path( fs_fd: BorrowedFd<'_>, key: Key, path: Path, fd: BorrowedFd<'_>, ) -> io::Result<()> { key.into_with_c_str(|key| { path.into_with_c_str(|path| { backend::mount::syscalls::fsconfig_set_path(fs_fd, key, path, fd) }) }) } /// `fsconfig(fs_fd, FSCONFIG_SET_PATH_EMPTY, key, "", fd)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsconfig.md #[inline] #[doc(alias = "fsconfig")] pub fn fsconfig_set_path_empty( fs_fd: BorrowedFd<'_>, key: Key, fd: BorrowedFd<'_>, ) -> io::Result<()> { key.into_with_c_str(|key| backend::mount::syscalls::fsconfig_set_path_empty(fs_fd, key, fd)) } /// `fsconfig(fs_fd, FSCONFIG_SET_FD, key, NULL, fd)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsconfig.md #[inline] #[doc(alias = "fsconfig")] pub fn fsconfig_set_fd( fs_fd: BorrowedFd<'_>, key: Key, fd: BorrowedFd<'_>, ) -> io::Result<()> { key.into_with_c_str(|key| backend::mount::syscalls::fsconfig_set_fd(fs_fd, key, fd)) } /// `fsconfig(fs_fd, FSCONFIG_CMD_CREATE, key, NULL, 0)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsconfig.md #[inline] #[doc(alias = "fsconfig")] pub fn fsconfig_create(fs_fd: BorrowedFd<'_>) -> io::Result<()> { backend::mount::syscalls::fsconfig_create(fs_fd) } /// `fsconfig(fs_fd, FSCONFIG_CMD_RECONFIGURE, key, NULL, 0)` /// /// # References /// - [Unfinished draft] /// /// [Unfinished draft]: https://github.com/sunfishcode/linux-mount-api-documentation/blob/main/fsconfig.md #[inline] #[doc(alias = "fsconfig")] pub fn fsconfig_reconfigure(fs_fd: BorrowedFd<'_>) -> io::Result<()> { backend::mount::syscalls::fsconfig_reconfigure(fs_fd) }