Introduce mount helper methods

This commit is contained in:
topjohnwu
2025-03-24 15:17:21 -07:00
committed by John Wu
parent c09a792958
commit e0a356b319
6 changed files with 132 additions and 132 deletions

View File

@@ -21,6 +21,7 @@ mod dir;
mod files;
mod logging;
mod misc;
mod mount;
mod result;
mod xwrap;

62
native/src/base/mount.rs Normal file
View File

@@ -0,0 +1,62 @@
use crate::{FsPath, LibcReturn};
use libc::c_ulong;
use std::ptr;
impl FsPath {
pub fn bind_mount_to(&self, path: &FsPath) -> std::io::Result<()> {
unsafe {
libc::mount(
self.as_ptr(),
path.as_ptr(),
ptr::null(),
libc::MS_BIND,
ptr::null(),
)
.as_os_err()
}
}
pub fn remount_with_flags(&self, flags: c_ulong) -> std::io::Result<()> {
unsafe {
libc::mount(
ptr::null(),
self.as_ptr(),
ptr::null(),
libc::MS_BIND | libc::MS_REMOUNT | flags,
ptr::null(),
)
.as_os_err()
}
}
pub fn move_mount_to(&self, path: &FsPath) -> std::io::Result<()> {
unsafe {
libc::mount(
self.as_ptr(),
path.as_ptr(),
ptr::null(),
libc::MS_MOVE,
ptr::null(),
)
.as_os_err()
}
}
pub fn unmount(&self) -> std::io::Result<()> {
unsafe { libc::umount2(self.as_ptr(), libc::MNT_DETACH).as_os_err() }
}
pub fn set_mount_private(&self, recursive: bool) -> std::io::Result<()> {
let flag = if recursive { libc::MS_REC } else { 0 };
unsafe {
libc::mount(
ptr::null(),
self.as_ptr(),
ptr::null(),
libc::MS_PRIVATE | flag,
ptr::null(),
)
.as_os_err()
}
}
}