From 43ecad2d433767f44cd89f52b15f4b3c623a31af Mon Sep 17 00:00:00 2001 From: Matt Jackson <1085847+MattJackson@users.noreply.github.com> Date: Mon, 20 Apr 2026 01:12:59 +0000 Subject: [PATCH] Clean API: read_sectors_recover(recovery: bool) replaces read_sectors_fast --- src/drive/mod.rs | 8 ++++++-- src/sector.rs | 10 +++++++--- src/verify.rs | 6 +++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/drive/mod.rs b/src/drive/mod.rs index 1421abc..face1be 100644 --- a/src/drive/mod.rs +++ b/src/drive/mod.rs @@ -670,8 +670,12 @@ impl SectorReader for Drive { self.read(lba, count, buf) } - fn read_sectors_fast(&mut self, lba: u32, count: u16, buf: &mut [u8]) -> Result { - self.read_fast(lba, count, buf) + fn read_sectors_recover(&mut self, lba: u32, count: u16, buf: &mut [u8], recovery: bool) -> Result { + if recovery { + self.read(lba, count, buf) + } else { + self.read_fast(lba, count, buf) + } } } diff --git a/src/sector.rs b/src/sector.rs index b875680..8f7f052 100644 --- a/src/sector.rs +++ b/src/sector.rs @@ -10,11 +10,15 @@ use crate::error::Result; pub trait SectorReader: Send { /// Read `count` sectors starting at `lba` into `buf`. /// `buf` must be at least `count * 2048` bytes. + /// Full recovery enabled (retry + reset on failure). fn read_sectors(&mut self, lba: u32, count: u16, buf: &mut [u8]) -> Result; - /// Fast single-attempt read — no recovery, short timeout. - /// Default implementation calls read_sectors (ISO files don't need fast mode). - fn read_sectors_fast(&mut self, lba: u32, count: u16, buf: &mut [u8]) -> Result { + /// Read with explicit recovery flag. + /// true = full retry/reset loop (for ripping). false = single attempt, fast fail (for verify). + /// Default: delegates to read_sectors (recovery=true behavior). + fn read_sectors_recover(&mut self, lba: u32, count: u16, buf: &mut [u8], recovery: bool) -> Result { + // Default ignores flag — file-backed readers don't have recovery + let _ = recovery; self.read_sectors(lba, count, buf) } diff --git a/src/verify.rs b/src/verify.rs index a8d2fbb..6879fa9 100644 --- a/src/verify.rs +++ b/src/verify.rs @@ -105,7 +105,7 @@ pub fn verify_title( let batch_start = Instant::now(); let batch_ok = reader - .read_sectors_fast(lba, count, &mut buf[..bytes]) + .read_sectors_recover(lba, count, &mut buf[..bytes], false) .is_ok(); let batch_ms = batch_start.elapsed().as_millis(); @@ -144,7 +144,7 @@ pub fn verify_title( let s1 = Instant::now(); let first_ok = reader - .read_sectors_fast(sector_lba, 1, &mut buf[sector_offset..sector_offset + 2048]) + .read_sectors_recover(sector_lba, 1, &mut buf[sector_offset..sector_offset + 2048], false) .is_ok(); let s1_ms = s1.elapsed().as_millis(); @@ -158,7 +158,7 @@ pub fn verify_title( // Retry once more after brief pause std::thread::sleep(std::time::Duration::from_secs(2)); if reader - .read_sectors_fast(sector_lba, 1, &mut buf[sector_offset..sector_offset + 2048]) + .read_sectors_recover(sector_lba, 1, &mut buf[sector_offset..sector_offset + 2048], false) .is_ok() { recovered += 1;