diff --git a/lib/Cargo.lock b/lib/Cargo.lock index 379c2f7..b0a4d55 100644 --- a/lib/Cargo.lock +++ b/lib/Cargo.lock @@ -235,7 +235,6 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-link", ] [[package]] diff --git a/lib/Cargo.toml b/lib/Cargo.toml index cf6bc36..24d5bcc 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -68,11 +68,7 @@ default-features = false [dependencies.jiff] version = "0.2" default-features = false -features = [ - "std", - "tz-system", - "tzdb-zoneinfo", -] +features = ["std"] optional = true [dependencies.serde] diff --git a/lib/src/crashlog.rs b/lib/src/crashlog.rs index c4f36b2..ae4f39e 100644 --- a/lib/src/crashlog.rs +++ b/lib/src/crashlog.rs @@ -6,6 +6,7 @@ use crate::bert::{Berr, Bert}; #[cfg(feature = "collateral_manager")] use crate::collateral::{CollateralManager, CollateralTree}; use crate::cper::{Cper, CperSectionBody}; +use crate::header::record_types; use crate::metadata::Metadata; use crate::node::Node; use crate::region::Region; @@ -27,8 +28,21 @@ impl CrashLog { pub(crate) fn from_regions(regions: Vec) -> Result { let mut queue = VecDeque::from(regions); let mut regions = Vec::new(); + let mut metadata = Metadata::default(); while let Some(region) = queue.pop_front() { + for record in region.records.iter() { + let is_box = record.header.version.record_type == record_types::BOX + || record.header.version.errata().type0_legacy_server_box; + + if !is_box + && let Ok(record_type) = record.header.record_type() + && !metadata.record_types.contains(&record_type) + { + metadata.record_types.push(record_type); + } + } + for child in region.get_children() { queue.push_back(child); } @@ -39,10 +53,7 @@ impl CrashLog { return Err(Error::InvalidCrashLog); } - Ok(CrashLog { - regions, - ..CrashLog::default() - }) + Ok(CrashLog { regions, metadata }) } /// Extracts the Crash Log records from [Berr]. diff --git a/lib/src/metadata.rs b/lib/src/metadata.rs index acadcbb..598a63a 100644 --- a/lib/src/metadata.rs +++ b/lib/src/metadata.rs @@ -24,8 +24,11 @@ pub struct Metadata { pub computer: Option, /// Name of the source where the Crash Log has been extracted from. pub source: Option, - /// Time of the extraction + /// Time of the extraction, expressed in UTC pub time: Option