From e87a7fba2c4d374942fa55e65796122d4e9ea5da Mon Sep 17 00:00:00 2001 From: Florian Stecker Date: Wed, 6 Mar 2024 22:23:50 -0500 Subject: [PATCH] 32 bit checksums --- btrfs_explorer/src/btrfs_structs.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/btrfs_explorer/src/btrfs_structs.rs b/btrfs_explorer/src/btrfs_structs.rs index c394831..34d686a 100644 --- a/btrfs_explorer/src/btrfs_structs.rs +++ b/btrfs_explorer/src/btrfs_structs.rs @@ -1,6 +1,5 @@ use btrfs_parse_derive::AllVariants; use btrfs_parse_derive::ParseBin; -use std::any::TypeId; use std::fmt; use std::error; use std::ffi::CString; @@ -97,6 +96,7 @@ pub enum Value { ExtentData(ExtentDataItem), Ref(Vec), RootRef(Vec), + Checksum(Vec), Unknown(Vec), } @@ -482,7 +482,7 @@ impl From<&str> for ParseError { } } -pub trait ParseBin where Self: Sized { +pub trait ParseBin: Sized { fn parse_len(bytes: &[u8]) -> Result<(Self, usize), ParseError>; fn parse(bytes: &[u8]) -> Result { @@ -692,6 +692,13 @@ impl ParseBin for Node { } Value::RootRef(result) }, + ItemType::ExtentCsum => { + let mut checksums: Vec = Vec::new(); + for i in 0..data_slice.len()/4 { + checksums.push(u32::from_le_bytes(data_slice[i*4 .. (i+1)*4].try_into().unwrap())); + } + Value::Checksum(checksums) + }, _ => Value::Unknown(Vec::from(data_slice)), };