mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-12-01 15:44:02 +00:00
Move occupy and unoccupy out of base crate
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
use crate::WalkResult::{Continue, Skip};
|
||||
use crate::{Directory, LibcReturn, OsResult, ResultExt, Utf8CStr, Utf8CStrBufArr};
|
||||
use crate::{LibcReturn, OsResult, Utf8CStr};
|
||||
use nix::mount::{MntFlags, MsFlags, mount, umount2};
|
||||
|
||||
impl Utf8CStr {
|
||||
@@ -82,52 +81,4 @@ impl Utf8CStr {
|
||||
)
|
||||
.check_os_err("set_mount_private", Some(self), None)
|
||||
}
|
||||
|
||||
pub fn occupy(&self) {
|
||||
Directory::open(self)
|
||||
.map(|mut dir| {
|
||||
dir.pre_order_walk(|entry| {
|
||||
let mut path = Utf8CStrBufArr::default();
|
||||
entry.resolve_path(&mut path)?;
|
||||
let path = path.as_utf8_cstr();
|
||||
mount(
|
||||
Some(path),
|
||||
path,
|
||||
None::<&Utf8CStr>,
|
||||
MsFlags::MS_BIND | MsFlags::MS_RDONLY,
|
||||
None::<&Utf8CStr>,
|
||||
)
|
||||
.check_os_err("occupy", Some(path), None)?;
|
||||
Ok(Continue)
|
||||
})
|
||||
.log_ok();
|
||||
})
|
||||
.log_ok();
|
||||
}
|
||||
|
||||
pub fn unoccupy(&self) -> bool {
|
||||
let mut ok = false;
|
||||
Directory::open(self)
|
||||
.map(|mut dir| {
|
||||
ok = dir
|
||||
.pre_order_walk(|entry| {
|
||||
let mut path = Utf8CStrBufArr::default();
|
||||
entry.resolve_path(&mut path)?;
|
||||
let path = path.as_utf8_cstr();
|
||||
umount2(path, MntFlags::MNT_DETACH).check_os_err(
|
||||
"unoccupy",
|
||||
Some(path),
|
||||
None,
|
||||
)?;
|
||||
if entry.is_dir() {
|
||||
Ok(Skip)
|
||||
} else {
|
||||
Ok(Continue)
|
||||
}
|
||||
})
|
||||
.is_ok();
|
||||
})
|
||||
.log_ok();
|
||||
ok
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crate::ffi::{BootConfig, MagiskInit, backup_init, magisk_proxy_main};
|
||||
use crate::logging::setup_klog;
|
||||
use crate::mount::is_rootfs;
|
||||
use crate::mount::{is_rootfs, occupy, unoccupy};
|
||||
use crate::twostage::hexpatch_init_for_second_stage;
|
||||
use base::libc::{basename, getpid, mount, umask};
|
||||
use base::nix::mount::MsFlags;
|
||||
@@ -44,15 +44,15 @@ impl MagiskInit {
|
||||
}
|
||||
|
||||
if rootfs_magisktmp {
|
||||
info!("Occupy /data.");
|
||||
cstr!("/data").occupy();
|
||||
info!("Occupy /data");
|
||||
occupy(cstr!("/data"));
|
||||
}
|
||||
}
|
||||
|
||||
fn second_stage(&mut self) {
|
||||
info!("Second Stage Init");
|
||||
|
||||
if cstr!("/data").unoccupy() {
|
||||
if unoccupy(cstr!("/data")) {
|
||||
nix::mount::mount(
|
||||
None::<&Utf8CStr>,
|
||||
cstr!("/data"),
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::ffi::MagiskInit;
|
||||
use base::WalkResult::{Continue, Skip};
|
||||
use base::nix::mount::{MntFlags, mount, umount2};
|
||||
use base::{
|
||||
Directory, FsPathBuilder, LibcReturn, LoggedResult, ResultExt, Utf8CStr, cstr, debug, libc,
|
||||
nix, parse_mount_info, raw_cstr,
|
||||
@@ -62,6 +64,54 @@ pub(crate) fn is_device_mounted(dev: u64, target: Pin<&mut CxxString>) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
pub(crate) fn occupy(path: &Utf8CStr) {
|
||||
Directory::open(path)
|
||||
.map(|mut dir| {
|
||||
dir.pre_order_walk(|entry| {
|
||||
let mut path = cstr::buf::default();
|
||||
entry.resolve_path(&mut path)?;
|
||||
let path = path.as_utf8_cstr();
|
||||
mount(
|
||||
Some(path),
|
||||
path,
|
||||
None::<&Utf8CStr>,
|
||||
MsFlags::MS_BIND | MsFlags::MS_RDONLY,
|
||||
None::<&Utf8CStr>,
|
||||
)
|
||||
.check_os_err("occupy", Some(path), None)?;
|
||||
Ok(Continue)
|
||||
})
|
||||
.log_ok();
|
||||
})
|
||||
.log_ok();
|
||||
}
|
||||
|
||||
pub(crate) fn unoccupy(path: &Utf8CStr) -> bool {
|
||||
let mut ok = false;
|
||||
Directory::open(path)
|
||||
.map(|mut dir| {
|
||||
ok = dir
|
||||
.pre_order_walk(|entry| {
|
||||
let mut path = cstr::buf::default();
|
||||
entry.resolve_path(&mut path)?;
|
||||
let path = path.as_utf8_cstr();
|
||||
umount2(path, MntFlags::MNT_DETACH).check_os_err(
|
||||
"unoccupy",
|
||||
Some(path),
|
||||
None,
|
||||
)?;
|
||||
if entry.is_dir() {
|
||||
Ok(Skip)
|
||||
} else {
|
||||
Ok(Continue)
|
||||
}
|
||||
})
|
||||
.is_ok();
|
||||
})
|
||||
.log_ok();
|
||||
ok
|
||||
}
|
||||
|
||||
const RAMFS_MAGIC: u32 = 0x858458f6;
|
||||
|
||||
pub(crate) fn is_rootfs() -> bool {
|
||||
|
||||
Reference in New Issue
Block a user