diff --git a/src/lib.rs b/src/lib.rs index 01bd637..997b01c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,8 @@ #![feature(const_fn)] -#![cfg_attr(feature = "alloc_ref", feature(allocator_api, alloc_layout_extra))] +#![cfg_attr( + feature = "alloc_ref", + feature(allocator_api, alloc_layout_extra, nonnull_slice_from_raw_parts) +)] #![no_std] #[cfg(test)] @@ -13,7 +16,7 @@ extern crate alloc; use alloc::alloc::Layout; #[cfg(feature = "alloc_ref")] -use alloc::alloc::{AllocErr, AllocInit, AllocRef, MemoryBlock}; +use alloc::alloc::{AllocErr, AllocRef}; #[cfg(feature = "use_spin")] use core::alloc::GlobalAlloc; use core::mem; @@ -158,22 +161,12 @@ impl Heap { #[cfg(feature = "alloc_ref")] unsafe impl AllocRef for Heap { - fn alloc(&mut self, layout: Layout, init: AllocInit) -> Result { + fn alloc(&mut self, layout: Layout) -> Result, AllocErr> { if layout.size() == 0 { - return Ok(MemoryBlock { - ptr: layout.dangling(), - size: 0, - }); + return Ok(NonNull::slice_from_raw_parts(layout.dangling(), 0)); } match self.allocate_first_fit(layout) { - Ok(ptr) => { - let block = MemoryBlock { - ptr, - size: layout.size(), - }; - unsafe { init.init(block) }; - Ok(block) - } + Ok(ptr) => Ok(NonNull::slice_from_raw_parts(ptr, layout.size())), Err(()) => Err(AllocErr), } }