From b99701d21649b8e5885d2bc7a63bdd41b501ecdb Mon Sep 17 00:00:00 2001 From: weishu Date: Thu, 4 Jan 2024 12:08:58 +0800 Subject: [PATCH] ksud: re-extract ksud when necessary close #1242 --- userspace/ksud/src/assets.rs | 3 ++- userspace/ksud/src/event.rs | 4 ++-- userspace/ksud/src/module.rs | 2 +- userspace/ksud/src/utils.rs | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/userspace/ksud/src/assets.rs b/userspace/ksud/src/assets.rs index 55ffe4c17888..2be03cf37d71 100644 --- a/userspace/ksud/src/assets.rs +++ b/userspace/ksud/src/assets.rs @@ -17,11 +17,12 @@ struct Asset; #[folder = "bin/x86_64"] struct Asset; -pub fn ensure_binaries() -> Result<()> { +pub fn ensure_binaries(ignore_if_exist: bool) -> Result<()> { for file in Asset::iter() { utils::ensure_binary( format!("{BINARY_DIR}{file}"), &Asset::get(&file).unwrap().data, + ignore_if_exist, )? } Ok(()) diff --git a/userspace/ksud/src/event.rs b/userspace/ksud/src/event.rs index 29ad2115c6c5..b2106ee66f30 100644 --- a/userspace/ksud/src/event.rs +++ b/userspace/ksud/src/event.rs @@ -126,7 +126,7 @@ pub fn on_post_data_fs() -> Result<()> { // we should clean the module mount point if it exists ensure_clean_dir(module_dir)?; - assets::ensure_binaries().with_context(|| "Failed to extract bin assets")?; + assets::ensure_binaries(true).with_context(|| "Failed to extract bin assets")?; if Path::new(module_update_img).exists() { if module_update_flag.exists() { @@ -259,7 +259,7 @@ pub fn install() -> Result<()> { std::fs::copy("/proc/self/exe", defs::DAEMON_PATH)?; restorecon::lsetfilecon(defs::DAEMON_PATH, restorecon::ADB_CON)?; // install binary assets - assets::ensure_binaries().with_context(|| "Failed to extract assets")?; + assets::ensure_binaries(false).with_context(|| "Failed to extract assets")?; #[cfg(target_os = "android")] link_ksud_to_bin()?; diff --git a/userspace/ksud/src/module.rs b/userspace/ksud/src/module.rs index e36fb1c01aa8..d978db891d32 100644 --- a/userspace/ksud/src/module.rs +++ b/userspace/ksud/src/module.rs @@ -330,7 +330,7 @@ fn _install_module(zip: &str) -> Result<()> { // print banner println!(include_str!("banner")); - assets::ensure_binaries().with_context(|| "Failed to extract assets")?; + assets::ensure_binaries(false).with_context(|| "Failed to extract assets")?; // first check if workding dir is usable ensure_dir_exists(defs::WORKING_DIR).with_context(|| "Failed to create working dir")?; diff --git a/userspace/ksud/src/utils.rs b/userspace/ksud/src/utils.rs index 4bffad6c41e6..55c7d67a26e6 100644 --- a/userspace/ksud/src/utils.rs +++ b/userspace/ksud/src/utils.rs @@ -45,8 +45,8 @@ pub fn ensure_dir_exists>(dir: T) -> Result<()> { } } -pub fn ensure_binary>(path: T, contents: &[u8]) -> Result<()> { - if path.as_ref().exists() { +pub fn ensure_binary>(path: T, contents: &[u8], ignore_if_exist: bool) -> Result<()> { + if ignore_if_exist && path.as_ref().exists() { return Ok(()); }