Vendor dependencies for 0.3.0 release

This commit is contained in:
2025-09-27 10:29:08 -05:00
parent 0c8d39d483
commit 82ab7f317b
26803 changed files with 16134934 additions and 0 deletions

View File

@@ -0,0 +1,219 @@
//! `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)
}

19
vendor/rustix-0.38.44/src/mount/mod.rs vendored Normal file
View File

@@ -0,0 +1,19 @@
//! Linux `mount` API.
// The `mount` module includes the `mount` function and related
// functions which were originally defined in `rustix::fs` but are
// now replaced by deprecated aliases. After the next semver bump,
// we can remove the aliases and all the `#[cfg(feature = "mount")]`
// here and in src/backend/*/mount.
//
// The `fsopen` module includes `fsopen` and related functions.
#[cfg(feature = "mount")]
mod fsopen;
mod mount_unmount;
mod types;
#[cfg(feature = "mount")]
pub use fsopen::*;
pub use mount_unmount::*;
pub use types::*;

View File

@@ -0,0 +1,210 @@
//! Linux `mount`.
use crate::backend::mount::types::{
InternalMountFlags, MountFlags, MountFlagsArg, MountPropagationFlags, UnmountFlags,
};
use crate::ffi::CStr;
use crate::path::{self, option_into_with_c_str};
use crate::{backend, io};
/// `mount(source, target, filesystemtype, mountflags, data)`
///
/// # References
/// - [Linux]
///
/// [Linux]: https://man7.org/linux/man-pages/man2/mount.2.html
#[inline]
pub fn mount<Source: path::Arg, Target: path::Arg, Fs: path::Arg, Data: path::Arg>(
source: Source,
target: Target,
file_system_type: Fs,
flags: MountFlags,
data: Data,
) -> io::Result<()> {
source.into_with_c_str(|source| {
target.into_with_c_str(|target| {
file_system_type.into_with_c_str(|file_system_type| {
data.into_with_c_str(|data| {
backend::mount::syscalls::mount(
Some(source),
target,
Some(file_system_type),
MountFlagsArg(flags.bits()),
Some(data),
)
})
})
})
})
}
/// `mount2(source, target, filesystemtype, mountflags, data)`
///
/// This is same as the [`mount`], except it adds support for the source,
/// target, and data being omitted, and the data is passed as a `CStr` rather
/// than a `path::Arg`.
///
/// # References
/// - [Linux]
///
/// [Linux]: https://man7.org/linux/man-pages/man2/mount.2.html
#[inline]
pub fn mount2<Source: path::Arg, Target: path::Arg, Fs: path::Arg>(
source: Option<Source>,
target: Target,
file_system_type: Option<Fs>,
flags: MountFlags,
data: Option<&CStr>,
) -> io::Result<()> {
option_into_with_c_str(source, |source| {
target.into_with_c_str(|target| {
option_into_with_c_str(file_system_type, |file_system_type| {
backend::mount::syscalls::mount(
source,
target,
file_system_type,
MountFlagsArg(flags.bits()),
data,
)
})
})
})
}
/// `mount(NULL, target, NULL, MS_REMOUNT | mountflags, data)`
///
/// # References
/// - [Linux]
///
/// [Linux]: https://man7.org/linux/man-pages/man2/mount.2.html
#[inline]
#[doc(alias = "mount")]
#[doc(alias = "MS_REMOUNT")]
pub fn mount_remount<Target: path::Arg, Data: path::Arg>(
target: Target,
flags: MountFlags,
data: Data,
) -> io::Result<()> {
target.into_with_c_str(|target| {
data.into_with_c_str(|data| {
backend::mount::syscalls::mount(
None,
target,
None,
MountFlagsArg(InternalMountFlags::REMOUNT.bits() | flags.bits()),
Some(data),
)
})
})
}
/// `mount(source, target, NULL, MS_BIND, NULL)`
///
/// # References
/// - [Linux]
///
/// [Linux]: https://man7.org/linux/man-pages/man2/mount.2.html
#[inline]
#[doc(alias = "mount")]
#[doc(alias = "MS_BIND")]
pub fn mount_bind<Source: path::Arg, Target: path::Arg>(
source: Source,
target: Target,
) -> io::Result<()> {
source.into_with_c_str(|source| {
target.into_with_c_str(|target| {
backend::mount::syscalls::mount(
Some(source),
target,
None,
MountFlagsArg(MountFlags::BIND.bits()),
None,
)
})
})
}
/// `mount(source, target, NULL, MS_BIND | MS_REC, NULL)`
///
/// # References
/// - [Linux]
///
/// [Linux]: https://man7.org/linux/man-pages/man2/mount.2.html
#[inline]
#[doc(alias = "mount")]
#[doc(alias = "MS_REC")]
pub fn mount_recursive_bind<Source: path::Arg, Target: path::Arg>(
source: Source,
target: Target,
) -> io::Result<()> {
source.into_with_c_str(|source| {
target.into_with_c_str(|target| {
backend::mount::syscalls::mount(
Some(source),
target,
None,
MountFlagsArg(MountFlags::BIND.bits() | MountPropagationFlags::REC.bits()),
None,
)
})
})
}
/// `mount(NULL, target, NULL, mountflags, NULL)`
///
/// # References
/// - [Linux]
///
/// [Linux]: https://man7.org/linux/man-pages/man2/mount.2.html
#[inline]
#[doc(alias = "mount")]
pub fn mount_change<Target: path::Arg>(
target: Target,
flags: MountPropagationFlags,
) -> io::Result<()> {
target.into_with_c_str(|target| {
backend::mount::syscalls::mount(None, target, None, MountFlagsArg(flags.bits()), None)
})
}
/// `mount(source, target, NULL, MS_MOVE, NULL)`
///
/// This is not the same as the `move_mount` syscall. If you want to use that,
/// use [`move_mount`] instead.
///
/// # References
/// - [Linux]
///
/// [`move_mount`]: crate::mount::move_mount
/// [Linux]: https://man7.org/linux/man-pages/man2/mount.2.html
#[inline]
#[doc(alias = "mount")]
#[doc(alias = "MS_MOVE")]
pub fn mount_move<Source: path::Arg, Target: path::Arg>(
source: Source,
target: Target,
) -> io::Result<()> {
source.into_with_c_str(|source| {
target.into_with_c_str(|target| {
backend::mount::syscalls::mount(
Some(source),
target,
None,
MountFlagsArg(InternalMountFlags::MOVE.bits()),
None,
)
})
})
}
/// `umount2(target, flags)`
///
/// # References
/// - [Linux]
///
/// [Linux]: https://man7.org/linux/man-pages/man2/umount.2.html
#[inline]
#[doc(alias = "umount", alias = "umount2")]
pub fn unmount<Target: path::Arg>(target: Target, flags: UnmountFlags) -> io::Result<()> {
target.into_with_c_str(|target| backend::mount::syscalls::unmount(target, flags))
}

View File

@@ -0,0 +1 @@
pub use crate::backend::mount::types::*;