Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/mft.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/attribute')
-rw-r--r--src/attribute/header.rs12
-rw-r--r--src/attribute/raw.rs5
-rw-r--r--src/attribute/x10.rs11
-rw-r--r--src/attribute/x20.rs7
-rw-r--r--src/attribute/x30.rs19
-rw-r--r--src/attribute/x40.rs11
-rw-r--r--src/attribute/x80.rs7
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))
}
}