From cfc982f2f38167768f41393383e4922dd949e4b8 Mon Sep 17 00:00:00 2001 From: weishu Date: Mon, 19 Feb 2024 16:36:41 +0800 Subject: [PATCH] ksud: don't reclaim when enable/disable modules --- justfile | 10 ++++++++++ userspace/ksud/src/module.rs | 14 ++++++++------ userspace/ksud/src/utils.rs | 6 ++++++ 3 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 justfile diff --git a/justfile b/justfile new file mode 100644 index 00000000..b36fd50f --- /dev/null +++ b/justfile @@ -0,0 +1,10 @@ +alias bk := build_ksud +alias bm := build_manager + +build_ksud: + cross build --target aarch64-linux-android --release --manifest-path ./userspace/ksud/Cargo.toml + +build_manager: build_ksud + cp userspace/ksud/target/aarch64-linux-android/release/ksud manager/app/src/main/jniLibs/arm64-v8a/libksud.so + cd manager && ./gradlew aDebug + diff --git a/userspace/ksud/src/module.rs b/userspace/ksud/src/module.rs index 11b4f7aa..a7031d65 100644 --- a/userspace/ksud/src/module.rs +++ b/userspace/ksud/src/module.rs @@ -475,7 +475,7 @@ pub fn install_module(zip: &str) -> Result<()> { result } -fn update_module(update_dir: &str, id: &str, func: F) -> Result<()> +fn update_module(update_dir: &str, id: &str, punch_hole: bool, func: F) -> Result<()> where F: Fn(&str, &str) -> Result<()>, { @@ -511,8 +511,10 @@ where // call the operation func let result = func(id, update_dir); - if let Err(e) = utils::punch_hole(modules_update_tmp_img) { - warn!("Failed to punch hole: {}", e); + if punch_hole { + if let Err(e) = utils::punch_hole(modules_update_tmp_img) { + warn!("Failed to punch hole: {}", e); + } } if let Err(e) = std::fs::rename(modules_update_tmp_img, defs::MODULE_UPDATE_IMG) { @@ -528,7 +530,7 @@ where } pub fn uninstall_module(id: &str) -> Result<()> { - update_module(defs::MODULE_UPDATE_TMP_DIR, id, |mid, update_dir| { + update_module(defs::MODULE_UPDATE_TMP_DIR, id, true, |mid, update_dir| { let dir = Path::new(update_dir); ensure!(dir.exists(), "No module installed"); @@ -594,13 +596,13 @@ fn _enable_module(module_dir: &str, mid: &str, enable: bool) -> Result<()> { } pub fn enable_module(id: &str) -> Result<()> { - update_module(defs::MODULE_UPDATE_TMP_DIR, id, |mid, update_dir| { + update_module(defs::MODULE_UPDATE_TMP_DIR, id, false, |mid, update_dir| { _enable_module(update_dir, mid, true) }) } pub fn disable_module(id: &str) -> Result<()> { - update_module(defs::MODULE_UPDATE_TMP_DIR, id, |mid, update_dir| { + update_module(defs::MODULE_UPDATE_TMP_DIR, id, false, |mid, update_dir| { _enable_module(update_dir, mid, false) }) } diff --git a/userspace/ksud/src/utils.rs b/userspace/ksud/src/utils.rs index f5172406..c112287c 100644 --- a/userspace/ksud/src/utils.rs +++ b/userspace/ksud/src/utils.rs @@ -232,6 +232,7 @@ pub fn copy_sparse_file, Q: AsRef>(src: P, dst: Q) -> Resul Ok(()) } +#[cfg(any(target_os = "linux", target_os = "android"))] pub fn punch_hole(src: impl AsRef) -> Result<()> { let mut src_file = OpenOptions::new().write(true).read(true).open(src)?; @@ -316,3 +317,8 @@ pub fn punch_hole(src: impl AsRef) -> Result<()> { Ok(()) } + +#[cfg(not(any(target_os = "linux", target_os = "android")))] +pub fn punch_hole(src: impl AsRef) -> Result<()> { + unimplemented!() +} \ No newline at end of file