diff --git a/Cargo.toml b/Cargo.toml index e7055fbe8c03f4d5df860fdd6e68c704f1d8432c..d22d232a842f568d3c7807789c3a60eddff962a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,4 +11,4 @@ repository = "https://gitlab.redox-os.org/redox-os/uefi_alloc" name = "uefi_alloc" [dependencies] -redox_uefi = "0.1.0" +redox_uefi = "0.1.2" diff --git a/src/lib.rs b/src/lib.rs index 4d14d2fc37850fa8ad0c7f5f878d71696634f7f8..ab481c6bfd89dd2a6f86d31f5fa986e6eec18144 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,10 @@ #![feature(allocator_api)] -#![feature(const_fn)] -#![feature(try_trait)] +#![feature(try_trait_v2)] +#![feature(control_flow_enum)] #![no_std] use core::alloc::{GlobalAlloc, Layout}; -use core::ops::Try; +use core::ops::{ControlFlow, Try}; use core::ptr::{self, NonNull}; use uefi::memory::MemoryType; use uefi::system::SystemTable; @@ -21,17 +21,16 @@ unsafe impl GlobalAlloc for Allocator { unsafe fn alloc(&self, layout: Layout) -> *mut u8 { let uefi = UEFI.expect("__rust_allocate: uefi not initialized"); let mut ptr = 0; - if (uefi.as_ref().BootServices.AllocatePool)( + let res = (uefi.as_ref().BootServices.AllocatePool)( MemoryType::EfiLoaderData, layout.size(), &mut ptr, ) - .into_result() - .is_ok() - { - ptr as *mut u8 - } else { - ptr::null_mut() + .branch(); + + match res { + ControlFlow::Continue(ptr) => ptr as *mut u8, + ControlFlow::Break(_) => ptr::null_mut(), } }