diff --git a/src/libconfig/src/load_pl.rs b/src/libconfig/src/load_pl.rs index 8eaceaea..6bbc5f84 100644 --- a/src/libconfig/src/load_pl.rs +++ b/src/libconfig/src/load_pl.rs @@ -140,16 +140,23 @@ pub fn load_bitstream( file: &mut File, ) -> Result<(), PlLoadingError> { let size = locate_bitstream(file)?; - let mut buffer: alloc::vec::Vec = alloc::vec::Vec::with_capacity(size); unsafe { - buffer.set_len(buffer.capacity()); + // align to 64 bytes + let ptr = alloc::alloc::alloc(alloc::alloc::Layout::from_size_align(size, 64).unwrap()); + let buffer = core::slice::from_raw_parts_mut(ptr, size); + file.read_exact(buffer).map_err(|e| { + core::ptr::drop_in_place(ptr); + e + })?; + let mut devcfg = devc::DevC::new(); + devcfg.enable(); + devcfg.program(&buffer).map_err(|e| { + core::ptr::drop_in_place(ptr); + e + })?; + core::ptr::drop_in_place(ptr); + Ok(()) } - file.read_exact(&mut buffer)?; - - let mut devcfg = devc::DevC::new(); - devcfg.enable(); - devcfg.program(&buffer)?; - Ok(()) } pub fn load_bitstream_from_sd() -> Result<(), PlLoadingError> {