relibc/header/malloc/
mod.rs1use crate::{
6 header::errno::ENOMEM,
7 platform::{
8 self, Pal, Sys,
9 types::{c_void, size_t},
10 },
11};
12use core::ptr;
13
14#[deprecated]
16#[unsafe(no_mangle)]
17pub unsafe extern "C" fn pvalloc(size: size_t) -> *mut c_void {
18 let page_size = Sys::getpagesize();
19 let num_pages = if size != 0 {
24 (size - 1) / page_size + 1
25 } else {
26 0
27 };
28
29 match num_pages.checked_mul(page_size) {
30 Some(alloc_size) => {
31 let ptr = unsafe { platform::alloc_align(alloc_size, page_size) };
32 if ptr.is_null() {
33 platform::ERRNO.set(ENOMEM);
34 }
35 ptr
36 }
37 None => {
38 platform::ERRNO.set(ENOMEM);
39 ptr::null_mut()
40 }
41 }
42}
43
44#[unsafe(no_mangle)]
46pub unsafe extern "C" fn malloc_usable_size(ptr: *mut c_void) -> size_t {
47 unsafe { platform::alloc_usable_size(ptr) }
48}