use core::mem::MaybeUninit;
use errno::Errno;
use windows_sys::Win32::System::SystemInformation::{GlobalMemoryStatusEx, MEMORYSTATUSEX};
pub fn populate_mem_status() -> Result<MEMORYSTATUSEX, Errno> {
let mut mem_status_ex: MaybeUninit<MEMORYSTATUSEX> = MaybeUninit::uninit();
#[allow(clippy::cast_possible_truncation)]
unsafe {
(*mem_status_ex.as_mut_ptr()).dwLength = size_of::<MEMORYSTATUSEX>() as u32
};
let return_value = unsafe { GlobalMemoryStatusEx(mem_status_ex.as_mut_ptr()) };
if return_value != 0 {
Ok(unsafe { mem_status_ex.assume_init() })
} else {
Err(errno::errno())
}
}
pub fn mem_status() -> MEMORYSTATUSEX {
populate_mem_status().expect("could not get system memory status")
}