#![allow(unsafe_code)]
#![allow(clippy::undocumented_unsafe_blocks)]
use crate::backend::conv::ret;
#[cfg(feature = "mount")]
use crate::backend::conv::{ret_owned_fd, slice, zero};
#[cfg(feature = "mount")]
use crate::fd::{BorrowedFd, OwnedFd};
use crate::ffi::CStr;
use crate::io;
#[inline]
pub(crate) fn mount(
source: Option<&CStr>,
target: &CStr,
file_system_type: Option<&CStr>,
flags: super::types::MountFlagsArg,
data: Option<&CStr>,
) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_mount,
source,
target,
file_system_type,
flags,
data
))
}
}
#[inline]
pub(crate) fn unmount(target: &CStr, flags: super::types::UnmountFlags) -> io::Result<()> {
unsafe { ret(syscall_readonly!(__NR_umount2, target, flags)) }
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsopen(fs_name: &CStr, flags: super::types::FsOpenFlags) -> io::Result<OwnedFd> {
unsafe { ret_owned_fd(syscall_readonly!(__NR_fsopen, fs_name, flags)) }
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsmount(
fs_fd: BorrowedFd<'_>,
flags: super::types::FsMountFlags,
attr_flags: super::types::MountAttrFlags,
) -> io::Result<()> {
unsafe { ret(syscall_readonly!(__NR_fsmount, fs_fd, flags, attr_flags)) }
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn move_mount(
from_dfd: BorrowedFd<'_>,
from_pathname: &CStr,
to_dfd: BorrowedFd<'_>,
to_pathname: &CStr,
flags: super::types::MoveMountFlags,
) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_move_mount,
from_dfd,
from_pathname,
to_dfd,
to_pathname,
flags
))
}
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn open_tree(
dfd: BorrowedFd<'_>,
filename: &CStr,
flags: super::types::OpenTreeFlags,
) -> io::Result<OwnedFd> {
unsafe { ret_owned_fd(syscall_readonly!(__NR_open_tree, dfd, filename, flags)) }
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fspick(
dfd: BorrowedFd<'_>,
path: &CStr,
flags: super::types::FsPickFlags,
) -> io::Result<OwnedFd> {
unsafe { ret_owned_fd(syscall_readonly!(__NR_fspick, dfd, path, flags)) }
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsconfig_set_flag(fs_fd: BorrowedFd<'_>, key: &CStr) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_fsconfig,
fs_fd,
super::types::FsConfigCmd::SetFlag,
key,
zero(),
zero()
))
}
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsconfig_set_string(
fs_fd: BorrowedFd<'_>,
key: &CStr,
value: &CStr,
) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_fsconfig,
fs_fd,
super::types::FsConfigCmd::SetString,
key,
value,
zero()
))
}
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsconfig_set_binary(
fs_fd: BorrowedFd<'_>,
key: &CStr,
value: &[u8],
) -> io::Result<()> {
let (value_addr, value_len) = slice(value);
unsafe {
ret(syscall_readonly!(
__NR_fsconfig,
fs_fd,
super::types::FsConfigCmd::SetBinary,
key,
value_addr,
value_len
))
}
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsconfig_set_fd(
fs_fd: BorrowedFd<'_>,
key: &CStr,
fd: BorrowedFd<'_>,
) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_fsconfig,
fs_fd,
super::types::FsConfigCmd::SetFd,
key,
zero(),
fd
))
}
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsconfig_set_path(
fs_fd: BorrowedFd<'_>,
key: &CStr,
path: &CStr,
fd: BorrowedFd<'_>,
) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_fsconfig,
fs_fd,
super::types::FsConfigCmd::SetPath,
key,
path,
fd
))
}
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsconfig_set_path_empty(
fs_fd: BorrowedFd<'_>,
key: &CStr,
fd: BorrowedFd<'_>,
) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_fsconfig,
fs_fd,
super::types::FsConfigCmd::SetPathEmpty,
key,
cstr!(""),
fd
))
}
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsconfig_create(fs_fd: BorrowedFd<'_>) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_fsconfig,
fs_fd,
super::types::FsConfigCmd::Create,
zero(),
zero(),
zero()
))
}
}
#[cfg(feature = "mount")]
#[inline]
pub(crate) fn fsconfig_reconfigure(fs_fd: BorrowedFd<'_>) -> io::Result<()> {
unsafe {
ret(syscall_readonly!(
__NR_fsconfig,
fs_fd,
super::types::FsConfigCmd::Reconfigure,
zero(),
zero(),
zero()
))
}
}