coreboot_fs/
file.rs

1use crate::Be32;
2use core::{mem, slice};
3use plain::Plain;
4
5#[derive(Clone, Copy, Debug)]
6#[repr(packed)]
7pub struct File {
8    pub magic: [u8; 8],
9    pub len: Be32,
10    pub kind: Be32,
11    pub checksum: Be32,
12    pub offset: Be32,
13}
14
15impl File {
16    pub fn name(&self) -> &[u8] {
17        unsafe {
18            slice::from_raw_parts(
19                (self as *const Self as *const u8).add(mem::size_of::<Self>()),
20                u32::from(self.offset) as usize - mem::size_of::<Self>()
21            )
22        }
23    }
24
25    pub fn data(&self) -> &[u8] {
26        unsafe {
27            slice::from_raw_parts(
28                (self as *const Self as *const u8).add(u32::from(self.offset) as usize),
29                u32::from(self.len) as usize
30            )
31        }
32    }
33}
34
35unsafe impl Plain for File {}