From 3df67a4a8e902a98cb25f271cdba4f6a13bc146f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 31 Oct 2026 21:07:41 +0000 Subject: [PATCH] Fix GB reading on android (#1328) --- src/device/controller/gbcart.rs | 15 ++++++++++++++- src/lib.rs | 8 ++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index b7389f2c..170bc07e 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -1,6 +1,8 @@ use crate::device; +#[cfg(target_os = "android")] +use crate::ui; -use std::io::Write; +use std::io::{Read, Write}; const MBC3_RTC_SECONDS: usize = 0; const MBC3_RTC_MINUTES: usize = 1; const MBC3_RTC_HOURS: usize = 2; @@ -34,6 +36,17 @@ pub enum CartType { MBC5RamBatt, } +pub fn read_file(path: &str) -> Option> { + #[cfg(target_os = "android")] + let mut file = ui::android::get_file_from_uri(&std::path::PathBuf::from(path))?; + #[cfg(not(target_os = "android"))] + let mut file = std::fs::File::open(path).ok()?; + + let mut contents = vec![]; + file.read_to_end(&mut contents).ok()?; + Some(contents) +} + pub fn init(gb_cart: &mut device::controller::gbcart::GbCart, rom: &[u8], ram: &[u8]) { gb_cart.rom = rom.to_vec(); let offset = match ram.len() % 8192 { diff --git a/src/lib.rs b/src/lib.rs index b3e51ae0..bac31783 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -194,8 +194,12 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_rom_path[i].is_empty() && !device.ui.config.input.gb_ram_path[i].is_empty() - && let Ok(rom) = std::fs::read(&device.ui.config.input.gb_rom_path[i]) - && let Ok(ram) = std::fs::read(&device.ui.config.input.gb_ram_path[i]) + && let Some(rom) = device::controller::gbcart::read_file( + &device.ui.config.input.gb_rom_path[i], + ) + && let Some(ram) = device::controller::gbcart::read_file( + &device.ui.config.input.gb_ram_path[i], + ) { device::controller::gbcart::init(&mut device.transferpaks[i].cart, &rom, &ram); }