Use `malloc` on non-Windows platforms (#3095)

This commit is contained in:
sivadeilra 2024-06-12 18:38:52 -07:00 коммит произвёл GitHub
Родитель 8e0e96d972
Коммит 66d876944d
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
1 изменённых файлов: 24 добавлений и 2 удалений

Просмотреть файл

@ -8,7 +8,17 @@ use core::ffi::c_void;
/// This function will fail in OOM situations, if the heap is otherwise corrupt,
/// or if getting a handle to the process heap fails.
pub fn heap_alloc(bytes: usize) -> crate::Result<*mut c_void> {
let ptr = unsafe { HeapAlloc(GetProcessHeap(), 0, bytes) };
#[cfg(windows)]
let ptr: *mut c_void = unsafe { HeapAlloc(GetProcessHeap(), 0, bytes) };
#[cfg(not(windows))]
let ptr: *mut c_void = unsafe {
extern "C" {
fn malloc(bytes: usize) -> *mut c_void;
}
malloc(bytes)
};
if ptr.is_null() {
Err(E_OUTOFMEMORY.into())
@ -32,5 +42,17 @@ pub fn heap_alloc(bytes: usize) -> crate::Result<*mut c_void> {
///
/// `ptr` must be a valid pointer to memory allocated by `HeapAlloc` or `HeapReAlloc`
pub unsafe fn heap_free(ptr: *mut c_void) {
HeapFree(GetProcessHeap(), 0, ptr);
#[cfg(windows)]
{
HeapFree(GetProcessHeap(), 0, ptr);
}
#[cfg(not(windows))]
{
extern "C" {
fn free(ptr: *mut c_void);
}
free(ptr);
}
}