diff --git a/src/clean.rs b/src/clean.rs index 1dc6110..64932ce 100644 --- a/src/clean.rs +++ b/src/clean.rs @@ -2,7 +2,7 @@ use intel_fw::{ EMPTY, ifd::{IFD, IfdError}, me::ME, - part::part::ClearOptions, + part::generic::ClearOptions, }; use log::warn; diff --git a/src/dir.rs b/src/dir.rs index 21ee886..e425251 100644 --- a/src/dir.rs +++ b/src/dir.rs @@ -1,3 +1,8 @@ +/// Directories for ME generation 2 and 3 +/// +/// There are multiple kinds of partitioning schemes, and some partitions may +/// contain directories, but directories could also be referenced by other data +/// structures, such as in the case of IFWI, so they are separate here. pub mod gen2; pub mod gen3; pub mod man; diff --git a/src/me.rs b/src/me.rs index 8f0459c..40b8e92 100644 --- a/src/me.rs +++ b/src/me.rs @@ -12,15 +12,11 @@ use crate::dir::{ gen2::Directory as Gen2Directory, gen3::{CPD_MAGIC_BYTES, CodePartitionDirectory}, }; -use crate::part::fpt::FTPR; -use crate::part::gen2::DirPartition; -use crate::part::gen3::CPDPartition; -use crate::part::part::Partition; use crate::part::{ - fpt::{FPT, MIN_FPT_SIZE}, - gen2::Gen2Partition, - gen3::Gen3Partition, - part::ClearOptions, + fpt::{FPT, FTPR, MIN_FPT_SIZE}, + gen2::{DirPartition, Gen2Partition}, + gen3::{CPDPartition, Gen3Partition}, + generic::{ClearOptions, Partition}, partitions::Partitions, }; use crate::ver::Version; diff --git a/src/part.rs b/src/part.rs index ab42563..80f9a19 100644 --- a/src/part.rs +++ b/src/part.rs @@ -1,5 +1,10 @@ +/// Partitioning for ME generation 2 and 3 +/// +/// There are multiple kinds of partitioning schemes, and some partitions may +/// contain directories, but directories could also be referenced by other data +/// structures, such as in the case of IFWI, so they are separate. pub mod fpt; pub mod gen2; pub mod gen3; -pub mod part; +pub mod generic; pub mod partitions; diff --git a/src/part/fpt.rs b/src/part/fpt.rs index df78e26..3dcc18e 100644 --- a/src/part/fpt.rs +++ b/src/part/fpt.rs @@ -25,7 +25,7 @@ use zerocopy_derive::{FromBytes, Immutable, IntoBytes}; use crate::{ EMPTY, - part::part::{ClearOptions, retain}, + part::generic::{ClearOptions, retain}, ver::Version, }; diff --git a/src/part/gen2.rs b/src/part/gen2.rs index a45d815..febc475 100644 --- a/src/part/gen2.rs +++ b/src/part/gen2.rs @@ -5,7 +5,7 @@ use crate::dir::gen2::{ALWAYS_RETAIN, Directory, LUT_HEADER_SIZE}; use crate::dump48; use crate::part::{ fpt::{FPT, FPTEntry, FTPR}, - part::{ + generic::{ ClearOptions, DataPartition, Partition, UnknownOrMalformedPartition, dir_clean, retain, strs_to_strings, }, diff --git a/src/part/gen3.rs b/src/part/gen3.rs index 99394e7..4fb1bbc 100644 --- a/src/part/gen3.rs +++ b/src/part/gen3.rs @@ -7,7 +7,7 @@ use crate::dir::{ use crate::dump48; use crate::part::{ fpt::{DIR_PARTS, FPT, FPTEntry, FS_PARTS, FTPR}, - part::{ + generic::{ ClearOptions, Partition, UnknownOrMalformedPartition, dir_clean, retain, strs_to_strings, }, }; diff --git a/src/part/part.rs b/src/part/generic.rs similarity index 88% rename from src/part/part.rs rename to src/part/generic.rs index 8c8d5c8..2ee438e 100644 --- a/src/part/part.rs +++ b/src/part/generic.rs @@ -1,3 +1,4 @@ +/// Generic data structures and helpers for partitions use serde::{Deserialize, Serialize}; use crate::{ @@ -5,12 +6,14 @@ use crate::{ part::fpt::{FPTEntry, FTPR}, }; +/// Data partitions are for now treated uniformly, but may carry semantics. #[derive(Serialize, Deserialize, Clone, Debug)] pub struct DataPartition { pub entry: FPTEntry, pub data: Vec, } +/// Last resort if a partition cannot be classified #[derive(Serialize, Deserialize, Clone, Debug)] pub struct UnknownOrMalformedPartition { pub entry: FPTEntry, @@ -18,6 +21,7 @@ pub struct UnknownOrMalformedPartition { pub note: String, } +/// Common trait for partitions and their relationship with the FPT pub trait Partition { fn entry(&self) -> &FPTEntry; fn data(&self) -> &Vec; @@ -62,6 +66,7 @@ pub fn strs_to_strings(strs: &[&str]) -> Vec { Vec::from(strs).iter().map(|s| String::from(*s)).collect() } +/// Options for clearing partitions and directories pub struct ClearOptions { pub keep_modules: bool, pub parts_force_retention: Vec, diff --git a/src/part/partitions.rs b/src/part/partitions.rs index bc10d08..87a30e5 100644 --- a/src/part/partitions.rs +++ b/src/part/partitions.rs @@ -5,13 +5,11 @@ use zerocopy::IntoBytes; use crate::EMPTY; use crate::dir::gen3::CPD_MAGIC_BYTES; -use crate::part::fpt::PartitionKind; -use crate::part::part::ClearOptions; use crate::part::{ - fpt::{FPT, FPTEntry}, + fpt::{FPT, FPTEntry, PartitionKind}, gen2::{self, Gen2Partition}, gen3::{self, Gen3Partition}, - part::{GenUnknownPartition, Partition}, + generic::{ClearOptions, GenUnknownPartition, Partition}, }; use crate::ver::Version;