diff options
Diffstat (limited to 'src/attribute')
-rw-r--r-- | src/attribute/header.rs | 12 | ||||
-rw-r--r-- | src/attribute/raw.rs | 5 | ||||
-rw-r--r-- | src/attribute/x10.rs | 11 | ||||
-rw-r--r-- | src/attribute/x20.rs | 7 | ||||
-rw-r--r-- | src/attribute/x30.rs | 19 | ||||
-rw-r--r-- | src/attribute/x40.rs | 11 | ||||
-rw-r--r-- | src/attribute/x80.rs | 7 |
7 files changed, 32 insertions, 40 deletions
diff --git a/src/attribute/header.rs b/src/attribute/header.rs index df19697..ac7cf44 100644 --- a/src/attribute/header.rs +++ b/src/attribute/header.rs @@ -1,5 +1,5 @@ use crate::attribute::{AttributeDataFlags, MftAttributeType}; -use crate::err::{self, Result}; +use crate::err::{Error, Result}; use crate::utils::read_utf16_string; use crate::ReadSeek; @@ -54,10 +54,9 @@ impl MftAttributeHeader { let type_code = match MftAttributeType::from_u32(type_code_value) { Some(attribute_type) => attribute_type, None => { - return err::UnknownAttributeType { + return Err(Error::UnknownAttributeType { attribute_type: type_code_value, - } - .fail() + }) } }; @@ -81,11 +80,10 @@ impl MftAttributeHeader { 0 => ResidentialHeader::Resident(ResidentHeader::from_stream(stream)?), 1 => ResidentialHeader::NonResident(NonResidentHeader::from_stream(stream)?), _ => { - return err::UnhandledResidentFlag { + return Err(Error::UnhandledResidentFlag { flag: resident_flag, offset: stream.tell()?, - } - .fail(); + }) } }; diff --git a/src/attribute/raw.rs b/src/attribute/raw.rs index 8285ae5..2482455 100644 --- a/src/attribute/raw.rs +++ b/src/attribute/raw.rs @@ -1,8 +1,7 @@ use crate::attribute::MftAttributeType; -use crate::err::{self, Result}; +use crate::err::Result; use crate::{utils, ReadSeek}; use serde::{ser, Serialize}; -use snafu::ResultExt; /// Placeholder attribute for currently unparsed attributes. #[derive(Serialize, Clone, Debug)] @@ -20,7 +19,7 @@ impl RawAttribute { ) -> Result<Self> { let mut data = vec![0_u8; data_size]; - stream.read_exact(&mut data).context(err::IoError)?; + stream.read_exact(&mut data)?; Ok(RawAttribute { attribute_type, diff --git a/src/attribute/x10.rs b/src/attribute/x10.rs index ce7a610..cb7bd2c 100644 --- a/src/attribute/x10.rs +++ b/src/attribute/x10.rs @@ -1,12 +1,11 @@ use crate::attribute::FileAttributeFlags; -use crate::err::{self, Result}; +use crate::err::{Error, Result}; use crate::ReadSeek; use byteorder::{LittleEndian, ReadBytesExt}; use chrono::{DateTime, Utc}; use log::trace; use serde::Serialize; -use snafu::ResultExt; use winstructs::timestamp::WinTimestamp; #[derive(Serialize, Debug, Clone)] @@ -62,16 +61,16 @@ impl StandardInfoAttr { pub fn from_reader<S: ReadSeek>(reader: &mut S) -> Result<StandardInfoAttr> { trace!("Offset {}: StandardInfoAttr", reader.tell()?); let created = WinTimestamp::from_reader(reader) - .context(err::FailedToReadWindowsTime)? + .map_err(Error::failed_to_read_windows_time)? .to_datetime(); let modified = WinTimestamp::from_reader(reader) - .context(err::FailedToReadWindowsTime)? + .map_err(Error::failed_to_read_windows_time)? .to_datetime(); let mft_modified = WinTimestamp::from_reader(reader) - .context(err::FailedToReadWindowsTime)? + .map_err(Error::failed_to_read_windows_time)? .to_datetime(); let accessed = WinTimestamp::from_reader(reader) - .context(err::FailedToReadWindowsTime)? + .map_err(Error::failed_to_read_windows_time)? .to_datetime(); Ok(StandardInfoAttr { diff --git a/src/attribute/x20.rs b/src/attribute/x20.rs index 13425ba..8437823 100644 --- a/src/attribute/x20.rs +++ b/src/attribute/x20.rs @@ -1,4 +1,4 @@ -use crate::err::{self, Result}; +use crate::err::{Error, Result}; use crate::ReadSeek; use log::trace; @@ -8,7 +8,6 @@ use encoding::{DecoderTrap, Encoding}; use serde::Serialize; -use snafu::ResultExt; use std::io::SeekFrom; use winstructs::ntfs::mft_reference::MftReference; @@ -34,7 +33,7 @@ impl AttributeListAttr { let name_offset = stream.read_u8()?; let first_vcn = stream.read_u64::<LittleEndian>()?; let base_reference = - MftReference::from_reader(stream).context(err::FailedToReadMftReference)?; + MftReference::from_reader(stream).map_err(Error::failed_to_read_mft_reference)?; let attribute_id = stream.read_u16::<LittleEndian>()?; let name = if name_length > 0 { @@ -45,7 +44,7 @@ impl AttributeListAttr { match UTF_16LE.decode(&name_buffer, DecoderTrap::Ignore) { Ok(s) => s, - Err(_e) => return err::InvalidFilename {}.fail(), + Err(_e) => return Err(Error::InvalidFilename {}), } } else { String::new() diff --git a/src/attribute/x30.rs b/src/attribute/x30.rs index 8a0d0f4..22aa8ec 100644 --- a/src/attribute/x30.rs +++ b/src/attribute/x30.rs @@ -1,8 +1,7 @@ use crate::attribute::FileAttributeFlags; -use crate::err::{self, Result}; +use crate::err::{Error, Result}; use crate::ReadSeek; use log::trace; -use snafu::OptionExt; use byteorder::{LittleEndian, ReadBytesExt}; use encoding::all::UTF_16LE; @@ -12,7 +11,6 @@ use chrono::{DateTime, Utc}; use num_traits::FromPrimitive; use serde::Serialize; -use snafu::ResultExt; use winstructs::ntfs::mft_reference::MftReference; use winstructs::timestamp::WinTimestamp; @@ -77,18 +75,19 @@ impl FileNameAttr { /// ``` pub fn from_stream<S: ReadSeek>(stream: &mut S) -> Result<FileNameAttr> { trace!("Offset {}: FilenameAttr", stream.tell()?); - let parent = MftReference::from_reader(stream).context(err::FailedToReadMftReference)?; + let parent = + MftReference::from_reader(stream).map_err(Error::failed_to_read_mft_reference)?; let created = WinTimestamp::from_reader(stream) - .context(err::FailedToReadWindowsTime)? + .map_err(Error::failed_to_read_windows_time)? .to_datetime(); let modified = WinTimestamp::from_reader(stream) - .context(err::FailedToReadWindowsTime)? + .map_err(Error::failed_to_read_windows_time)? .to_datetime(); let mft_modified = WinTimestamp::from_reader(stream) - .context(err::FailedToReadWindowsTime)? + .map_err(Error::failed_to_read_windows_time)? .to_datetime(); let accessed = WinTimestamp::from_reader(stream) - .context(err::FailedToReadWindowsTime)? + .map_err(Error::failed_to_read_windows_time)? .to_datetime(); let logical_size = stream.read_u64::<LittleEndian>()?; @@ -98,14 +97,14 @@ impl FileNameAttr { let name_length = stream.read_u8()?; let namespace = stream.read_u8()?; let namespace = - FileNamespace::from_u8(namespace).context(err::UnknownNamespace { namespace })?; + FileNamespace::from_u8(namespace).ok_or(Error::UnknownNamespace { namespace })?; let mut name_buffer = vec![0; (name_length as usize * 2) as usize]; stream.read_exact(&mut name_buffer)?; let name = match UTF_16LE.decode(&name_buffer, DecoderTrap::Ignore) { Ok(s) => s, - Err(_e) => return err::InvalidFilename {}.fail(), + Err(_e) => return Err(Error::InvalidFilename {}), }; Ok(FileNameAttr { diff --git a/src/attribute/x40.rs b/src/attribute/x40.rs index beea829..2526c82 100644 --- a/src/attribute/x40.rs +++ b/src/attribute/x40.rs @@ -1,7 +1,6 @@ -use crate::err::{self, Result}; +use crate::err::{Error, Result}; use crate::ReadSeek; use serde::Serialize; -use snafu::ResultExt; use winstructs::guid::Guid; /// $Data Attribute @@ -20,11 +19,11 @@ pub struct ObjectIdAttr { impl ObjectIdAttr { /// Data size should be either 16 or 64 pub fn from_stream<S: ReadSeek>(stream: &mut S, data_size: usize) -> Result<ObjectIdAttr> { - let object_id = Guid::from_stream(stream).context(err::FailedToReadGuid)?; + let object_id = Guid::from_reader(stream).map_err(Error::failed_to_read_guid)?; let (birth_volume_id, birth_object_id, domain_id) = if data_size == 64 { - let g1 = Guid::from_stream(stream).context(err::FailedToReadGuid)?; - let g2 = Guid::from_stream(stream).context(err::FailedToReadGuid)?; - let g3 = Guid::from_stream(stream).context(err::FailedToReadGuid)?; + let g1 = Guid::from_reader(stream).map_err(Error::failed_to_read_guid)?; + let g2 = Guid::from_reader(stream).map_err(Error::failed_to_read_guid)?; + let g3 = Guid::from_reader(stream).map_err(Error::failed_to_read_guid)?; (Some(g1), Some(g2), Some(g3)) } else { (None, None, None) diff --git a/src/attribute/x80.rs b/src/attribute/x80.rs index f194a0e..81918c7 100644 --- a/src/attribute/x80.rs +++ b/src/attribute/x80.rs @@ -1,7 +1,6 @@ -use crate::err::{self, Result}; +use crate::err::Result; use crate::{utils, ReadSeek}; use serde::ser; -use snafu::ResultExt; /// $Data Attribute #[derive(Clone, Debug)] @@ -11,7 +10,7 @@ impl DataAttr { pub fn from_stream<S: ReadSeek>(stream: &mut S, data_size: usize) -> Result<DataAttr> { let mut data = vec![0_u8; data_size]; - stream.read_exact(&mut data).context(err::IoError)?; + stream.read_exact(&mut data)?; Ok(DataAttr(data)) } @@ -26,6 +25,6 @@ impl ser::Serialize for DataAttr { where S: ser::Serializer, { - serializer.serialize_str(&utils::to_hex_string(&self.0).to_string()) + serializer.serialize_str(&utils::to_hex_string(&self.0)) } } |