diff options
author | Omer Ben-Amram <omerbenamram@gmail.com> | 2019-05-22 17:11:24 +0300 |
---|---|---|
committer | Omer Ben-Amram <omerbenamram@gmail.com> | 2019-05-22 17:11:24 +0300 |
commit | 928a327974ade70cf1823dcf68527e1eaf07788f (patch) | |
tree | d7a199773f61d601463dce9c91fa052fc7f3f38a | |
parent | 835327aa394f5a1707dee006a196973724f3152a (diff) |
make size optional
-rw-r--r-- | src/csv.rs | 10 | ||||
-rw-r--r-- | src/mft.rs | 12 |
2 files changed, 19 insertions, 3 deletions
@@ -1,3 +1,13 @@ +use crate::attribute::x30::FileNamespace; +use crate::attribute::{FileAttributeFlags, MftAttributeContent, MftAttributeType}; +use crate::entry::EntryFlags; +use crate::{MftAttribute, MftEntry, MftParser, ReadSeek}; + +use serde::Serialize; + +use chrono::{DateTime, Utc}; +use std::path::PathBuf; + /// Used for CSV output #[derive(Serialize)] #[serde(rename_all = "PascalCase")] @@ -32,7 +32,7 @@ impl MftParser<BufReader<File>> { let mft_fh = File::open(f).context(err::FailedToOpenFile { path: f.to_owned() })?; let size = fs::metadata(f)?.len(); - Self::from_read_seek(BufReader::with_capacity(4096, mft_fh), size) + Self::from_read_seek(BufReader::with_capacity(4096, mft_fh), Some(size)) } } @@ -43,14 +43,20 @@ impl MftParser<Cursor<Vec<u8>>> { let size = buffer.len() as u64; let cursor = Cursor::new(buffer); - Self::from_read_seek(cursor, size) + Self::from_read_seek(cursor, Some(size)) } } impl<T: ReadSeek> MftParser<T> { - pub fn from_read_seek(mut data: T, size: u64) -> Result<Self> { + pub fn from_read_seek(mut data: T, size: Option<u64>) -> Result<Self> { // We use the first entry to guess the entry size for all the other records. let first_entry = EntryHeader::from_reader(&mut data, 0)?; + + let size = match size { + Some(sz) => sz, + None => data.seek(SeekFrom::End(0))?, + }; + data.seek(SeekFrom::Start(0))?; Ok(Self { |