diff --git a/src/tools.rs b/src/tools.rs index 30a8b190..6c22a62c 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -13,6 +13,21 @@ use std::os::unix::io::AsRawFd; pub mod timer; +fn map_struct(buffer: &[u8]) -> Result<&T, Error> { + if buffer.len() < ::std::mem::size_of::() { + bail!("unable to map struct - buffer too small"); + } + return Ok(unsafe { & * (buffer.as_ptr() as *const T) }); +} + +fn map_struct_mut(buffer: &mut [u8]) -> Result<&mut T, Error> { + if buffer.len() < ::std::mem::size_of::() { + bail!("unable to map struct - buffer too small"); + } + return Ok(unsafe { &mut * (buffer.as_ptr() as *mut T) }); +} + + pub fn file_set_contents>( path: P, data: &[u8],