220 lines
6.5 KiB
Rust
220 lines
6.5 KiB
Rust
//! `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: path::Arg>(fs_name: Fs, flags: FsOpenFlags) -> io::Result<OwnedFd> {
|
|
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<OwnedFd> {
|
|
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: path::Arg, To: path::Arg>(
|
|
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<Path: path::Arg>(
|
|
dfd: BorrowedFd<'_>,
|
|
filename: Path,
|
|
flags: OpenTreeFlags,
|
|
) -> io::Result<OwnedFd> {
|
|
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<Path: path::Arg>(
|
|
dfd: BorrowedFd<'_>,
|
|
path: Path,
|
|
flags: FsPickFlags,
|
|
) -> io::Result<OwnedFd> {
|
|
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<Key: path::Arg>(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<Key: path::Arg, Value: path::Arg>(
|
|
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<Key: path::Arg>(
|
|
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<Key: path::Arg, Path: path::Arg>(
|
|
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<Key: path::Arg>(
|
|
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<Key: path::Arg>(
|
|
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)
|
|
}
|