1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
use plain::Plain; #[derive(Clone, Copy, Debug)] #[repr(packed)] pub struct FmapArea { pub offset: u32, pub size: u32, pub name: [u8; 32], pub flags: u16, } #[derive(Clone, Copy, Debug)] #[repr(packed)] pub struct Fmap { pub signature: [u8; 8], pub ver_major: u8, pub ver_minor: u8, pub base: u64, pub size: u32, pub name: [u8; 32], pub nareas: u16, } impl Fmap { pub fn area(&self, i: u16) -> &FmapArea { unsafe { &*((self as *const Self).add(1) as *const FmapArea).add(i as usize) } } } unsafe impl Plain for Fmap {}