From a2a99f18d43dbfb76f72fe2771c292b9090e21f0 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Sat, 4 Nov 2017 16:20:48 -0700 Subject: add drive-level verification --- src/drive.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/drive.rs') diff --git a/src/drive.rs b/src/drive.rs index 9826980..73c0744 100644 --- a/src/drive.rs +++ b/src/drive.rs @@ -152,6 +152,30 @@ impl<'a> DatDrive { unimplemented!() } + pub fn read_file_bytes, R: Read>(&mut self, path: P) -> Result> { + let de = self.broken_find_file(path.as_ref())?; + if let Some(entry) = de { + // TODO: read and concatonate chunks + let stat = entry.stat.unwrap(); + let mut buf = vec![]; + let offset = stat.get_offset(); + let blocks = stat.get_blocks(); + for i in offset..(offset+blocks) { + let mut chunk = self.content.get_data_entry(i)?; + buf.append(&mut chunk); + } + return Ok(buf); + } else { + bail!("Couldn't find path: {}", path.as_ref().display()); + } + } + + pub fn verify(&mut self) -> Result<()> { + self.metadata.verify()?; + self.content.verify()?; + Ok(()) + } + /* Possible future helper functions to be even more like std::fs pub fn rename, Q: AsRef>(&mut self, from: P, to: Q) -> Result<()> pub fn copy, Q: AsRef>(&mut self, from: P, to: Q) -> Result<()> -- cgit v1.2.3