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

github.com/windirstat/ntfs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Finck <colin@reactos.org>2021-08-19 00:25:42 +0300
committerColin Finck <colin@reactos.org>2021-08-19 00:25:42 +0300
commitff2110ef9541e8d895a393d53fe2e487071bc520 (patch)
treed696fe460ce609b3179c1819ba131e6a307a913a
parent9ec69a2b57163f8cf70c6d0307b11d23fb2c923a (diff)
Standardize on "File Record Number" to denote the n-th FILE Record.
-rw-r--r--src/error.rs4
-rw-r--r--src/file.rs2
-rw-r--r--src/ntfs.rs25
-rw-r--r--src/structured_values/file_name.rs6
-rw-r--r--src/structured_values/standard_information.rs6
-rw-r--r--src/upcase_table.rs4
6 files changed, 23 insertions, 24 deletions
diff --git a/src/error.rs b/src/error.rs
index 04f93df..2d752bf 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -39,14 +39,14 @@ pub enum NtfsError {
},
/// The cluster count {cluster_count} is too big
InvalidClusterCount { cluster_count: u64 },
- /// The requested NTFS file {n} is invalid
- InvalidFile { n: u64 },
/// The NTFS file record at byte position {position:#010x} indicates an allocated size of {expected} bytes, but the record only has a size of {actual} bytes
InvalidFileAllocatedSize {
position: u64,
expected: u32,
actual: u32,
},
+ /// The requested NTFS file record number {file_record_number} is invalid
+ InvalidFileRecordNumber { file_record_number: u64 },
/// The NTFS file record at byte position {position:#010x} should have signature {expected:?}, but it has signature {actual:?}
InvalidFileSignature {
position: u64,
diff --git a/src/file.rs b/src/file.rs
index c5f25a4..9307f87 100644
--- a/src/file.rs
+++ b/src/file.rs
@@ -16,7 +16,7 @@ use byteorder::{ByteOrder, LittleEndian};
use memoffset::offset_of;
#[repr(u64)]
-pub enum KnownNtfsFile {
+pub enum KnownNtfsFileRecordNumber {
MFT = 0,
MFTMirr = 1,
LogFile = 2,
diff --git a/src/ntfs.rs b/src/ntfs.rs
index 22b7306..deaa546 100644
--- a/src/ntfs.rs
+++ b/src/ntfs.rs
@@ -4,7 +4,7 @@
use crate::attribute::NtfsAttributeType;
use crate::boot_sector::BootSector;
use crate::error::{NtfsError, Result};
-use crate::file::{KnownNtfsFile, NtfsFile};
+use crate::file::{KnownNtfsFileRecordNumber, NtfsFile};
use crate::structured_values::{NtfsVolumeInformation, NtfsVolumeName};
use crate::upcase_table::UpcaseTable;
use binread::io::{Read, Seek, SeekFrom};
@@ -66,26 +66,21 @@ impl Ntfs {
self.cluster_size
}
- /// Returns the [`NtfsFile`] for the `n`-th NTFS file record.
+ /// Returns the [`NtfsFile`] for the given NTFS file record number.
///
/// The first few NTFS files have fixed indexes and contain filesystem
- /// management information (see the [`KnownNtfsFile`] enum).
- ///
- /// TODO:
- /// - Check if `n` can be u32 instead of u64.
- /// - Check if `n` should be in a newtype, with easier conversion from
- /// KnownNtfsFile.
- pub fn file<'n, T>(&'n self, fs: &mut T, n: u64) -> Result<NtfsFile<'n>>
+ /// management information (see the [`KnownNtfsFileRecordNumber`] enum).
+ pub fn file<'n, T>(&'n self, fs: &mut T, file_record_number: u64) -> Result<NtfsFile<'n>>
where
T: Read + Seek,
{
- let offset = n
+ let offset = file_record_number
.checked_mul(self.file_record_size as u64)
- .ok_or(NtfsError::InvalidFile { n })?;
+ .ok_or(NtfsError::InvalidFileRecordNumber { file_record_number })?;
let position = self
.mft_position
.checked_add(offset)
- .ok_or(NtfsError::InvalidFile { n })?;
+ .ok_or(NtfsError::InvalidFileRecordNumber { file_record_number })?;
NtfsFile::new(&self, fs, position)
}
@@ -111,7 +106,7 @@ impl Ntfs {
where
T: Read + Seek,
{
- self.file(fs, KnownNtfsFile::RootDirectory as u64)
+ self.file(fs, KnownNtfsFileRecordNumber::RootDirectory as u64)
}
/// Returns the size of a single sector in bytes.
@@ -146,7 +141,7 @@ impl Ntfs {
where
T: Read + Seek,
{
- let volume_file = self.file(fs, KnownNtfsFile::Volume as u64)?;
+ let volume_file = self.file(fs, KnownNtfsFileRecordNumber::Volume as u64)?;
let attribute = volume_file.attribute_by_ty(NtfsAttributeType::VolumeInformation)?;
attribute.resident_structured_value::<NtfsVolumeInformation>()
}
@@ -159,7 +154,7 @@ impl Ntfs {
where
T: Read + Seek,
{
- let volume_file = iter_try!(self.file(fs, KnownNtfsFile::Volume as u64));
+ let volume_file = iter_try!(self.file(fs, KnownNtfsFileRecordNumber::Volume as u64));
let attribute = volume_file
.attribute_by_ty(NtfsAttributeType::VolumeName)
.ok()?;
diff --git a/src/structured_values/file_name.rs b/src/structured_values/file_name.rs
index 72b528a..6ec45b4 100644
--- a/src/structured_values/file_name.rs
+++ b/src/structured_values/file_name.rs
@@ -182,7 +182,7 @@ impl NtfsIndexEntryKey for NtfsFileName {
#[cfg(test)]
mod tests {
use super::*;
- use crate::file::KnownNtfsFile;
+ use crate::file::KnownNtfsFileRecordNumber;
use crate::ntfs::Ntfs;
use crate::time::tests::NT_TIMESTAMP_2021_01_01;
@@ -190,7 +190,9 @@ mod tests {
fn test_file_name() {
let mut testfs1 = crate::helpers::tests::testfs1();
let ntfs = Ntfs::new(&mut testfs1).unwrap();
- let mft = ntfs.file(&mut testfs1, KnownNtfsFile::MFT as u64).unwrap();
+ let mft = ntfs
+ .file(&mut testfs1, KnownNtfsFileRecordNumber::MFT as u64)
+ .unwrap();
let mut mft_attributes = mft.attributes();
// Check the FileName attribute of the MFT.
diff --git a/src/structured_values/standard_information.rs b/src/structured_values/standard_information.rs
index 3cb9876..9cf55fd 100644
--- a/src/structured_values/standard_information.rs
+++ b/src/structured_values/standard_information.rs
@@ -125,14 +125,16 @@ impl<'s> NtfsStructuredValueFromSlice<'s> for NtfsStandardInformation {
#[cfg(test)]
mod tests {
use super::*;
- use crate::file::KnownNtfsFile;
+ use crate::file::KnownNtfsFileRecordNumber;
use crate::ntfs::Ntfs;
#[test]
fn test_standard_information() {
let mut testfs1 = crate::helpers::tests::testfs1();
let ntfs = Ntfs::new(&mut testfs1).unwrap();
- let mft = ntfs.file(&mut testfs1, KnownNtfsFile::MFT as u64).unwrap();
+ let mft = ntfs
+ .file(&mut testfs1, KnownNtfsFileRecordNumber::MFT as u64)
+ .unwrap();
let mut mft_attributes = mft.attributes();
// Check the StandardInformation attribute of the MFT.
diff --git a/src/upcase_table.rs b/src/upcase_table.rs
index 9ee5883..29796c7 100644
--- a/src/upcase_table.rs
+++ b/src/upcase_table.rs
@@ -3,7 +3,7 @@
use crate::attribute::NtfsAttributeType;
use crate::error::{NtfsError, Result};
-use crate::file::KnownNtfsFile;
+use crate::file::KnownNtfsFileRecordNumber;
use crate::ntfs::Ntfs;
use crate::traits::NtfsReadSeek;
use binread::io::{Read, Seek};
@@ -35,7 +35,7 @@ impl UpcaseTable {
T: Read + Seek,
{
// Lookup the $UpCase file and its $DATA attribute.
- let upcase_file = ntfs.file(fs, KnownNtfsFile::UpCase as u64)?;
+ let upcase_file = ntfs.file(fs, KnownNtfsFileRecordNumber::UpCase as u64)?;
let data_attribute = upcase_file.attribute_by_ty(NtfsAttributeType::Data)?;
if data_attribute.value_length() != UPCASE_TABLE_SIZE {
return Err(NtfsError::InvalidUpcaseTableSize {