From 10dd854685127d0402afcf730f1e931105b13492 Mon Sep 17 00:00:00 2001 From: theubusu <80545678+theubusu@users.noreply.github.com> Date: Tue, 17 Feb 2026 18:34:46 +0100 Subject: [PATCH] unify error and success handling in extractors --- src/formats/amlogic/mod.rs | 4 +--- src/formats/android_ota_payload/mod.rs | 5 +---- src/formats/bdl/mod.rs | 2 -- src/formats/epk1/mod.rs | 19 ++++++++++++------- src/formats/epk2/mod.rs | 12 +++++------- src/formats/epk2b/mod.rs | 10 ++++++---- src/formats/epk3/mod.rs | 4 +--- src/formats/funai_upg/mod.rs | 4 +--- src/formats/invincible_image/mod.rs | 5 +---- src/formats/msd/mod.rs | 8 ++++++-- src/formats/msd10/mod.rs | 13 +++++++------ src/formats/msd11/mod.rs | 9 ++++----- src/formats/mstar/mod.rs | 5 +---- src/formats/mtk_bdp/mod.rs | 10 +++------- src/formats/mtk_pkg/mod.rs | 2 -- src/formats/mtk_pkg_new/mod.rs | 2 -- src/formats/mtk_pkg_old/mod.rs | 2 -- src/formats/nvt_timg/mod.rs | 7 ++----- src/formats/pana_dvd/mod.rs | 2 -- src/formats/pfl_upg/mod.rs | 5 +---- src/formats/pup/mod.rs | 1 - src/formats/roku/mod.rs | 1 - src/formats/ruf/mod.rs | 4 +--- src/formats/rvp/mod.rs | 2 -- src/formats/samsung_old/mod.rs | 5 +---- src/formats/sddl_sec/mod.rs | 2 -- src/formats/slp/mod.rs | 8 +------- src/formats/sony_bdp/mod.rs | 2 -- src/main.rs | 3 +++ 29 files changed, 58 insertions(+), 100 deletions(-) diff --git a/src/formats/amlogic/mod.rs b/src/formats/amlogic/mod.rs index 53b1706..b68190b 100644 --- a/src/formats/amlogic/mod.rs +++ b/src/formats/amlogic/mod.rs @@ -32,8 +32,7 @@ pub fn extract_amlogic(app_ctx: &AppContext, _ctx: Box) -> Result<(), B header.image_size, header.item_align_size, header.item_count, header.version); if header.version != 2 { - println!("\nSorry, this format version is not yet supported!"); - return Ok(()); + return Err("Unsupported format version! (Only 2 is supported right now)".into()); } let mut items: Vec = Vec::new(); @@ -74,6 +73,5 @@ pub fn extract_amlogic(app_ctx: &AppContext, _ctx: Box) -> Result<(), B } } - println!("\nExtraction finished!"); Ok(()) } \ No newline at end of file diff --git a/src/formats/android_ota_payload/mod.rs b/src/formats/android_ota_payload/mod.rs index adcc919..dd721e7 100644 --- a/src/formats/android_ota_payload/mod.rs +++ b/src/formats/android_ota_payload/mod.rs @@ -32,8 +32,7 @@ pub fn extract_android_ota_payload(app_ctx: &AppContext, _ctx: Box) -> println!("File info:\nFormat version: {}\nManifest size: {}", header.file_format_version, header.manifest_size); if header.file_format_version != 2 { - println!("\nSorry, this version of the file is not supported!"); - return Ok(()) + return Err("Unsupported format version! (Only 2 is supported right now)".into()); } let base_offset = 24 /* size of header */ + header.manifest_size + header.metadata_signature_size as u64; @@ -85,7 +84,5 @@ pub fn extract_android_ota_payload(app_ctx: &AppContext, _ctx: Box) -> println!("\n-- Saved!"); } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/bdl/mod.rs b/src/formats/bdl/mod.rs index 4445cae..4839106 100644 --- a/src/formats/bdl/mod.rs +++ b/src/formats/bdl/mod.rs @@ -70,7 +70,5 @@ pub fn extract_bdl(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box) -> Result<(), Box< println!("\nLittle endian EPK1 detected."); epk1_type = "le"; } else { - println!("\nUnknown EPK1 variant!"); - return Ok(()); + return Err("Unknown EPK1 variant!".into()); } file.seek(SeekFrom::Start(0))?; @@ -54,7 +53,10 @@ pub fn extract_epk1(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< } paks.push(Pak { offset: pak.offset, size: pak.size }); } - assert!(header.pak_count as usize == paks.len(), "Paks count in header({}) does not match the amount of non empty pak entries({})!", header.pak_count, paks.len()); + + if header.pak_count as usize != paks.len() { + return Err(format!("Paks count in header({}) does not match the amount of non empty pak entries({})!", header.pak_count, paks.len()).into()); + } let version = common::read_exact(&mut file, 4)?; @@ -68,7 +70,9 @@ pub fn extract_epk1(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< let header_size_bytes = common::read_file(&file, 12, 4)?; //offset of first entry, can be treated as header size let header_size = u32::from_le_bytes(header_size_bytes.try_into().unwrap()); let max_pak_count = (header_size - 48) / 8; //header size minus common header + ota id (48) divide by size of pak entry (8). - assert!(max_pak_count < 128, "Unreasonable calculated pak count {}!!", max_pak_count); + if max_pak_count > 128 { + return Err(format!("Unreasonable calculated pak count {}!!", max_pak_count).into()); + } for _i in 0..max_pak_count { let pak: Pak = file.read_le()?; @@ -77,7 +81,10 @@ pub fn extract_epk1(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< } paks.push(Pak { offset: pak.offset, size: pak.size }); } - assert!(header.pak_count as usize == paks.len(), "Paks count in header({}) does not match the amount of non empty pak entries({})!", header.pak_count, paks.len()); + + if header.pak_count as usize != paks.len() { + return Err(format!("Paks count in header({}) does not match the amount of non empty pak entries({})!", header.pak_count, paks.len()).into()); + } let version = common::read_exact(&mut file, 4)?; @@ -104,8 +111,6 @@ pub fn extract_epk1(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< println!("- Saved file!"); } - - println!("\nExtraction finished!"); Ok(()) } \ No newline at end of file diff --git a/src/formats/epk2/mod.rs b/src/formats/epk2/mod.rs index dd0e8d0..83ff3e7 100644 --- a/src/formats/epk2/mod.rs +++ b/src/formats/epk2/mod.rs @@ -47,8 +47,7 @@ pub fn extract_epk2(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< matching_key = Some(key_bytes); header = decrypt_aes_ecb_auto(matching_key.as_ref().unwrap(), &stored_header)?; } else { - println!("No valid key found!"); - return Ok(()); + return Err("No valid key found!".into()); } } //parse header @@ -86,8 +85,7 @@ pub fn extract_epk2(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< println!("Found correct key: {}", key_name); matching_key = Some(key_bytes); } else { - println!("No valid key found!"); - return Ok(()); + return Err("No valid key found!".into()); } } let matching_key_bytes = matching_key.as_ref().unwrap(); @@ -109,7 +107,9 @@ pub fn extract_epk2(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< pak_header = pak_header_reader.read_le()?; } - assert!(i == pak_header.segment_index, "Unexpected segment index in pak header!, expected: {}, got: {}", i , pak_header.segment_index); + if i != pak_header.segment_index { + return Err(format!("Unexpected segment index in pak header!, expected: {}, got: {}", i , pak_header.segment_index).into()); + } let actual_segment_size = // check if this is the last segment and not the last PAK @@ -144,7 +144,5 @@ pub fn extract_epk2(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< } } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/epk2b/mod.rs b/src/formats/epk2b/mod.rs index 37ff92b..53996cd 100644 --- a/src/formats/epk2b/mod.rs +++ b/src/formats/epk2b/mod.rs @@ -39,7 +39,9 @@ pub fn extract_epk2b(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box paks.push(Pak { offset: pak.offset, size: pak.size }); } - assert!(header.pak_count as usize == paks.len(), "Paks count in header does not match the amount of non empty pak entries!"); + if header.pak_count as usize != paks.len() { + return Err(format!("Paks count in header({}) does not match the amount of non empty pak entries({})!", header.pak_count, paks.len()).into()); + } for (i, pak) in paks.iter().enumerate() { file.seek(SeekFrom::Start(pak.offset as u64))?; @@ -56,7 +58,9 @@ pub fn extract_epk2b(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box pak_header = file.read_le()?; } - assert!(i == pak_header.segment_index, "Unexpected segment index in pak header!, expected: {}, got: {}", i , pak_header.segment_index); + if i != pak_header.segment_index { + return Err(format!("Unexpected segment index in pak header!, expected: {}, got: {}", i , pak_header.segment_index).into()); + } println!("- Segment {}/{} - Size: {}", i + 1, pak_header.segment_count, pak_header.segment_size); let out_data = common::read_exact(&mut file, pak_header.segment_size as usize)?; @@ -79,7 +83,5 @@ pub fn extract_epk2b(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box } } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/epk3/mod.rs b/src/formats/epk3/mod.rs index 4858c7a..112260f 100644 --- a/src/formats/epk3/mod.rs +++ b/src/formats/epk3/mod.rs @@ -43,8 +43,7 @@ pub fn extract_epk3(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< new_type = true; } else { - println!("No valid key found!"); - return Ok(()); + return Err("No valid key found!".into()); } let signature_size = if new_type {256} else {128}; @@ -110,6 +109,5 @@ pub fn extract_epk3(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box< pak_i += 1; } - println!("\nExtraction finished!"); Ok(()) } \ No newline at end of file diff --git a/src/formats/funai_upg/mod.rs b/src/formats/funai_upg/mod.rs index b721f2a..198f563 100644 --- a/src/formats/funai_upg/mod.rs +++ b/src/formats/funai_upg/mod.rs @@ -46,8 +46,6 @@ pub fn extract_funai_upg(app_ctx: &AppContext, _ctx: Box) -> Result<(), println!("- Saved file!"); } - - println!("\nExtraction finished!"); - + Ok(()) } \ No newline at end of file diff --git a/src/formats/invincible_image/mod.rs b/src/formats/invincible_image/mod.rs index fae3853..8b49fb7 100644 --- a/src/formats/invincible_image/mod.rs +++ b/src/formats/invincible_image/mod.rs @@ -39,8 +39,7 @@ pub fn extract_invincible_image(app_ctx: &AppContext, _ctx: Box) -> Res } if header.file_version[0] != 3 { - println!("\nSorry, this version of the file is not supported!"); - return Ok(()) + return Err("Unsupported format version! (Only 3 is supported right now)".into()); } let mut encrypted_data = Vec::new(); @@ -77,7 +76,5 @@ pub fn extract_invincible_image(app_ctx: &AppContext, _ctx: Box) -> Res i += 1; } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/msd/mod.rs b/src/formats/msd/mod.rs index 230265b..bed6f21 100644 --- a/src/formats/msd/mod.rs +++ b/src/formats/msd/mod.rs @@ -12,7 +12,9 @@ type Aes128CbcDec = Decryptor; pub fn decrypt_aes_salted_old(encrypted_data: &[u8], passphrase_bytes: &Vec) -> Result, Box> { let mut data = encrypted_data.to_vec(); - assert!(data[0..8].to_vec() == b"Salted__", "invalid encrypted data!"); + if data[0..8].to_vec() != b"Salted__" { + return Err("Invalid encrypted data!".into()); + } let salt = &data[8..16]; //key = md5 of (passphrase + salt) @@ -38,7 +40,9 @@ pub fn decrypt_aes_salted_old(encrypted_data: &[u8], passphrase_bytes: &Vec) pub fn decrypt_aes_salted_tizen(encrypted_data: &[u8], passphrase_bytes: &Vec) -> Result, Box> { let mut data = encrypted_data.to_vec(); - assert!(data[0..8].to_vec() == b"Salted__", "invalid encrypted data!"); + if data[0..8].to_vec() != b"Salted__" { + return Err("Invalid encrypted data!".into()); + } let salt = &data[8..16]; //iv = md5 of salt diff --git a/src/formats/msd10/mod.rs b/src/formats/msd10/mod.rs index 7b99408..8f1fae3 100644 --- a/src/formats/msd10/mod.rs +++ b/src/formats/msd10/mod.rs @@ -70,8 +70,7 @@ pub fn extract_msd10(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box passphrase_bytes = hex::decode(p)?; println!("Firmware type: {}", firmware_type); } else { - println!("Sorry, this firmware is not supported!"); - std::process::exit(1); + return Err("This firmware is not supported!".into()); } let toc_offset = headers[0].offset; @@ -95,7 +94,9 @@ pub fn extract_msd10(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box println!("\n({}/{}) - {}, Size: {}", i + 1, items.len(), item.name, size); - assert!(sections[i as usize].index == item.item_id, "Item ID in TOC does not match ID from header!"); + if sections[i as usize].index != item.item_id { + return Err("Item ID in TOC does not match ID from header!".into()); + } let stored_data = common::read_file(&file, offset as u64, size as usize)?; @@ -132,7 +133,9 @@ pub fn extract_msd10(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box println!("\n({}/{}) - {}, Type: {}, Size: {}", item.item_id, items.len(), item.name, type_str, item.all_size); - assert!(sections[i as usize].index == item.item_id, "Item ID in TOC does not match ID from header!"); + if sections[i as usize].index != item.item_id { + return Err("Item ID in TOC does not match ID from header!".into()); + } if item.item_type == 0x11 { //Skip CMAC DATA println!("- Skipping CMAC Data..."); @@ -162,7 +165,5 @@ pub fn extract_msd10(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box } } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/msd11/mod.rs b/src/formats/msd11/mod.rs index 6b87cb3..09bbb69 100644 --- a/src/formats/msd11/mod.rs +++ b/src/formats/msd11/mod.rs @@ -65,8 +65,7 @@ pub fn extract_msd11(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box println!("Passphrase: {}", p); passphrase_bytes = hex::decode(p)?; } else { - println!("Sorry, this firmware is not supported!"); - std::process::exit(1); + return Err("This firmware is not supported!".into()); } let toc_offset = headers[0].offset + 8; @@ -88,7 +87,9 @@ pub fn extract_msd11(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box println!("\n({}/{}) - {}, Size: {}", i + 1, items.len(), item.name, size); - assert!(sections[i as usize].index == item.item_id, "Item ID in TOC does not match ID from header!"); + if sections[i as usize].index != item.item_id { + return Err("Item ID in TOC does not match ID from header!".into()); + } let stored_data = common::read_file(&file, offset as u64, size as usize)?; @@ -109,7 +110,5 @@ pub fn extract_msd11(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box println!("-- Saved file!"); } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/mstar/mod.rs b/src/formats/mstar/mod.rs index 906dce0..28cb790 100644 --- a/src/formats/mstar/mod.rs +++ b/src/formats/mstar/mod.rs @@ -47,7 +47,7 @@ pub fn extract_mstar(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box script_string = String::from_utf8_lossy(&script); if script_string == "" { - println!("Failed to get script."); + return Err("Failed to get script".into()); } } @@ -168,8 +168,5 @@ pub fn extract_mstar(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box i += 1; } - println!(); - println!("Extraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/mtk_bdp/mod.rs b/src/formats/mtk_bdp/mod.rs index 5431255..22c9bbc 100644 --- a/src/formats/mtk_bdp/mod.rs +++ b/src/formats/mtk_bdp/mod.rs @@ -72,8 +72,7 @@ pub fn extract_mtk_bdp(app_ctx: &AppContext, ctx: Box) -> Result<(), Bo let mut pit_entries: Vec = Vec::new(); let pit_header: PITHeader = file.read_le()?; if pit_header.pit_magic != PIT_MAGIC { - println!("Invalid PIT Magic!"); - return Ok(()); + return Err("Invalid PIT magic!".into()); } println!("PIT Info - First entry offs: {}, Entry size: {}, Entry count: {}", pit_header.first_entry_offset, pit_header.entry_size, pit_header.entry_count); file.seek(SeekFrom::Start(pit_offset + pit_header.first_entry_offset as u64))?; @@ -90,8 +89,7 @@ pub fn extract_mtk_bdp(app_ctx: &AppContext, ctx: Box) -> Result<(), Bo let mut bit_entries: Vec = Vec::new(); let bit_magic = common::read_exact(&mut file, 20)?; if bit_magic != BIT_MAGIC { - println!("Invalid BIT Magic!"); - return Ok(()); + return Err("Invalid BIT magic!".into()); } let mut bit_i = 0; @@ -127,8 +125,6 @@ pub fn extract_mtk_bdp(app_ctx: &AppContext, ctx: Box) -> Result<(), Bo println!("-- Saved file!"); } - - println!("\nExtraction finished!"); - + Ok(()) } \ No newline at end of file diff --git a/src/formats/mtk_pkg/mod.rs b/src/formats/mtk_pkg/mod.rs index aa1f523..f728ed6 100644 --- a/src/formats/mtk_pkg/mod.rs +++ b/src/formats/mtk_pkg/mod.rs @@ -162,7 +162,5 @@ pub fn extract_mtk_pkg(app_ctx: &AppContext, ctx: Box) -> Result<(), Bo println!("-- Saved file!"); } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/mtk_pkg_new/mod.rs b/src/formats/mtk_pkg_new/mod.rs index dd0bfc1..1203a8e 100644 --- a/src/formats/mtk_pkg_new/mod.rs +++ b/src/formats/mtk_pkg_new/mod.rs @@ -132,7 +132,5 @@ pub fn extract_mtk_pkg_new(app_ctx: &AppContext, ctx: Box) -> Result<() println!("-- Saved file!"); } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/mtk_pkg_old/mod.rs b/src/formats/mtk_pkg_old/mod.rs index 6719736..0d91749 100644 --- a/src/formats/mtk_pkg_old/mod.rs +++ b/src/formats/mtk_pkg_old/mod.rs @@ -102,7 +102,5 @@ pub fn extract_mtk_pkg_old(app_ctx: &AppContext, _ctx: Box) -> Result<( println!("-- Saved file!"); } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/nvt_timg/mod.rs b/src/formats/nvt_timg/mod.rs index 774486c..581e4fd 100644 --- a/src/formats/nvt_timg/mod.rs +++ b/src/formats/nvt_timg/mod.rs @@ -35,8 +35,7 @@ pub fn extract_nvt_timg(app_ctx: &AppContext, _ctx: Box) -> Result<(), pimg_i += 1; let pimg: PIMG = file.read_le()?; if &pimg.magic_bytes != b"PIMG" { - println!("Invalid PIMG magic!"); - return Ok(()); + return Err("Invalid PIMG magic!".into()); } let data = common::read_exact(&mut file, pimg.size as usize)?; @@ -57,7 +56,7 @@ pub fn extract_nvt_timg(app_ctx: &AppContext, _ctx: Box) -> Result<(), println!("-- Saved file!"); continue } else { - println!("- Warning: unsupported compression type!"); + println!("- Warning: unsupported compression type, saving stored data!"); out_data = data; } @@ -68,7 +67,5 @@ pub fn extract_nvt_timg(app_ctx: &AppContext, _ctx: Box) -> Result<(), println!("-- Saved file!"); } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/pana_dvd/mod.rs b/src/formats/pana_dvd/mod.rs index ae907f6..541e92d 100644 --- a/src/formats/pana_dvd/mod.rs +++ b/src/formats/pana_dvd/mod.rs @@ -105,8 +105,6 @@ pub fn extract_pana_dvd(app_ctx: &AppContext, ctx: Box) -> Result<(), B } } - println!("\nExtraction finished!"); - Ok(()) } diff --git a/src/formats/pfl_upg/mod.rs b/src/formats/pfl_upg/mod.rs index 2e1b118..df189ea 100644 --- a/src/formats/pfl_upg/mod.rs +++ b/src/formats/pfl_upg/mod.rs @@ -52,8 +52,7 @@ pub fn extract_pfl_upg(app_ctx: &AppContext, _ctx: Box) -> Result<(), B } } if key.is_none() { - println!("Sorry, this firmware is not supported!"); - std::process::exit(1); + return Err("This firmware is not supported!".into()); } //get key @@ -142,8 +141,6 @@ pub fn extract_pfl_upg(app_ctx: &AppContext, _ctx: Box) -> Result<(), B println!("- Saved file!"); } - - println!("\nExtraction finished!"); Ok(()) } \ No newline at end of file diff --git a/src/formats/pup/mod.rs b/src/formats/pup/mod.rs index f8eb905..bf1d3ba 100644 --- a/src/formats/pup/mod.rs +++ b/src/formats/pup/mod.rs @@ -133,6 +133,5 @@ pub fn extract_pup(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box) -> Result<(), Box< } } - println!("\nExtraction finished!"); Ok(()) } \ No newline at end of file diff --git a/src/formats/ruf/mod.rs b/src/formats/ruf/mod.rs index a8b39f8..3419e86 100644 --- a/src/formats/ruf/mod.rs +++ b/src/formats/ruf/mod.rs @@ -36,7 +36,6 @@ pub fn extract_ruf(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box) -> Result<(), Box) -> Result<( if let Some(p) = secret { println!("Secret: {}", p); } else { - println!("Sorry, this firmware is not supported!"); - std::process::exit(1); + return Err("This firmware is not supported!".into()); } for entry in fs::read_dir(image_path)? { @@ -129,7 +128,5 @@ pub fn extract_samsung_old(app_ctx: &AppContext, _ctx: Box) -> Result<( } } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/sddl_sec/mod.rs b/src/formats/sddl_sec/mod.rs index 823ba48..96db2cc 100644 --- a/src/formats/sddl_sec/mod.rs +++ b/src/formats/sddl_sec/mod.rs @@ -155,7 +155,5 @@ pub fn extract_sddl_sec(app_ctx: &AppContext, _ctx: Box) -> Result<(), } } - println!("\nExtraction finished!"); - Ok(()) } \ No newline at end of file diff --git a/src/formats/slp/mod.rs b/src/formats/slp/mod.rs index 20833b8..6b3813b 100644 --- a/src/formats/slp/mod.rs +++ b/src/formats/slp/mod.rs @@ -62,11 +62,7 @@ pub fn extract_slp(app_ctx: &AppContext, _ctx: Box) -> Result<(), Box) -> Result<(), Box) -> Result<(), println!("- Not an MTK BDP file."); } } - - println!("\nExtraction finished!"); Ok(()) } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e602d3b..bba8397 100644 --- a/src/main.rs +++ b/src/main.rs @@ -90,6 +90,9 @@ fn main() -> Result<(), Box> { if let Some(ctx) = (format.detector_func)(&app_ctx)? { println!("\n{} detected!", format.name); (format.extractor_func)(&app_ctx, ctx)?; + + //extractor returned with no error + println!("\nExtraction finished! Saved extracted files to {}", output_path_str); return Ok(()); } }