From 9fc18ac183ddb980ee6f7725d12e8996732165e8 Mon Sep 17 00:00:00 2001 From: drojf <1249449+drojf@users.noreply.github.com> Date: Tue, 1 Apr 2025 21:45:27 +1100 Subject: [PATCH] Fix local 7za/7z (from download) not being found by `main.rs` - Gave "Warning: '7za' not found - trying '7z' instead" error and then panic --- src/main.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 86c0418..78fd614 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,20 @@ use inflector::Inflector; use log::*; use simplelog::{TermLogger, TerminalMode, ColorChoice,Config}; +fn try_absolute_exe_path(exe_name: &str) -> std::ffi::OsString +{ + if let Ok(maybe_path) = fs::canonicalize(format!("{}.exe", exe_name)) + { + if maybe_path.exists() + { + println!("Successfully found abs path of [{}] at [{}]", exe_name, maybe_path.to_string_lossy()); + return maybe_path.into_os_string(); + } + } + + return std::ffi::OsString::from(exe_name); +} + fn main() -> ExitCode { TermLogger::init( LevelFilter::Trace, @@ -253,14 +267,14 @@ fn main() -> ExitCode { let cwd = "output".to_string(); let files_to_archive = format!("{}/sharedassets0.assets", higu_ep_folder_name); - let result_7za = pack_7zip("7za", &archive, &cwd, &files_to_archive); + let result_7za = pack_7zip(&try_absolute_exe_path("7za"), &archive, &cwd, &files_to_archive); let status: std::io::Result = match result_7za { Ok(ok) => Ok(ok), Err(err) => match err.kind() { std::io::ErrorKind::NotFound => { println!("Warning: '7za' not found - trying '7z' instead"); - pack_7zip("7z", &archive, &cwd, &files_to_archive) + pack_7zip(&try_absolute_exe_path("7z"), &archive, &cwd, &files_to_archive) }, _ => Err(err), } @@ -278,8 +292,8 @@ fn format_checksum(checksum: Option<&String>, sep: &str) -> String return checksum.map_or("".to_string(), |c| format!("{}{}", sep, c)); } -fn pack_7zip(command: &str, archive: &String, cwd: &String, path: &String) -> std::io::Result { - println!("[7-Zip] Running {} in working directory: [{}] and path: [{}]...", command, cwd, path); +fn pack_7zip>(command: &S, archive: &String, cwd: &String, path: &String) -> std::io::Result { + println!("[7-Zip] Running {} in working directory: [{}] and path: [{}]...", command.as_ref().to_string_lossy(), cwd, path); Command::new(command) .current_dir(cwd)