From f925630696da4e5d3d47b0eddeddfb68a0459d78 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 10 May 2021 19:38:51 +0100 Subject: [PATCH] bundles: Reorgsnise by_name_caseless Signed-off-by: Ian Jackson --- src/bundles.rs | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/bundles.rs b/src/bundles.rs index e6ff1e0b..abaf548f 100644 --- a/src/bundles.rs +++ b/src/bundles.rs @@ -295,27 +295,13 @@ impl IndexedZip where R: Read + io::Seek { } IndexedZip { za, members } } -} -#[ext(pub)] -impl ZipArchive where R: Read + io::Seek { #[throws(LoadError)] - fn by_name_caseless<'a>(&'a mut self, name: &str) -> ZipFile<'a> + fn by_name_caseless<'a>(&'a mut self, name: &str) -> Option> { - fn search<'a,R>(za: &'a mut ZipArchive, name: &str) - -> Result - where R: Read + io::Seek - { - for i in 0..za.len() { - let m = za.by_index(i); - if matches!(m, Err(ZipError::FileNotFound)) { continue } - let m = m?; - if m.name_raw().eq_ignore_ascii_case(name.as_bytes()) { return Ok(i) } - } - return Err(LE::BadBundle(format!("bundle missing {}", name))); - } - let i = search(self, name)?; - self.by_index(i)? + if_let!{ Some(&i) = self.members.get(&UniCase::new(name.to_owned())); + else return Ok(None) } + Some(self.za.by_index(i)?) } } @@ -404,7 +390,9 @@ where EH: BundleParseError, })?; let meta = EH::besteffort(bpath, ||{ - let mut mf = za.by_name_caseless("otter.toml")?; + const META: &str = "otter.toml"; + let mut mf = za.by_name_caseless(META)? + .ok_or_else(|| LE::BadBundle(format!("bundle missing {}", META)))?; let mut meta = String::new(); mf.read_to_string(&mut meta).map_err( |e| LE::BadBundle(format!("access toml zip member: {}", e)))?; -- 2.30.2