diff options
Diffstat (limited to 'www/deno/files/patch-ext_os_sys__info.rs')
-rw-r--r-- | www/deno/files/patch-ext_os_sys__info.rs | 93 |
1 files changed, 77 insertions, 16 deletions
diff --git a/www/deno/files/patch-ext_os_sys__info.rs b/www/deno/files/patch-ext_os_sys__info.rs index ebc5fe51d89d..87763d5552b2 100644 --- a/www/deno/files/patch-ext_os_sys__info.rs +++ b/www/deno/files/patch-ext_os_sys__info.rs @@ -1,23 +1,84 @@ ---- ext/os/sys_info.rs.orig 2022-11-13 21:31:36 UTC +--- ext/os/sys_info.rs.orig 2025-04-03 11:12:07 UTC +++ ext/os/sys_info.rs -@@ -296,6 +296,20 @@ pub fn mem_info() -> Option<MemInfo> { - mem_info.swap_free = mem_info.swap_total; +@@ -2,6 +2,9 @@ use std::sync::Once; + #[cfg(target_family = "windows")] + use std::sync::Once; + ++#[cfg(target_os = "freebsd")] ++use libc; ++ + type LoadAvg = (f64, f64, f64); + const DEFAULT_LOADAVG: LoadAvg = (0.0, 0.0, 0.0); + +@@ -193,6 +196,26 @@ pub fn hostname() -> String { + } + } + ++#[cfg(target_os = "freebsd")] ++pub fn sysctlbyname<T: Sized>(name: &[u8], oldp: &mut T) -> bool { ++ let mut oldlenp = std::mem::size_of::<T>() as libc::size_t; ++ ++ unsafe { ++ let res = libc::sysctlbyname( ++ name.as_ptr() as *const libc::c_char, ++ oldp as *mut _ as *mut _, ++ &mut oldlenp, ++ std::ptr::null_mut(), ++ 0, ++ ); ++ if res != 0 { ++ return false; ++ } else { ++ return true; ++ } ++ } ++} ++ + #[derive(serde::Serialize)] + #[serde(rename_all = "camelCase")] + pub struct MemInfo { +@@ -243,6 +266,44 @@ pub fn mem_info() -> Option<MemInfo> { } } -+ } + } ++ + #[cfg(target_os = "freebsd")] + { -+ use sysinfo::System; -+ let mut sys = System::new_all(); ++ let mut v_page_count = 0; ++ let mut v_free_count = 0; ++ let mut v_inactive_count = 0; ++ let mut v_laundry_count = 0; + -+ // First we update all information of our `System` struct. -+ sys.refresh_all(); ++ if sysctlbyname(b"vm.stats.vm.v_page_count\0", &mut v_page_count) == false { ++ v_page_count = 0; ++ } + -+ mem_info.swap_total = sys.total_swap(); -+ mem_info.swap_free = sys.free_swap(); -+ mem_info.total = sys.total_memory(); -+ mem_info.free = sys.free_memory(); -+ mem_info.available = sys.available_memory(); - } - - Some(mem_info) ++ if sysctlbyname(b"vm.stats.vm.v_free_count\0", &mut v_free_count) == false { ++ v_free_count = 0; ++ } ++ ++ if sysctlbyname(b"vm.stats.vm.v_inactive_count\0", &mut v_inactive_count) == false { ++ v_inactive_count = 0; ++ } ++ ++ if sysctlbyname(b"vm.stats.vm.v_laundry_count\0", &mut v_laundry_count) == false { ++ v_laundry_count = 0; ++ } ++ ++ // SAFETY: libc call (get system page size) ++ let pagesize = unsafe { libc::sysconf(libc::_SC_PAGESIZE) } as u64; ++ ++ let mem_inactive = v_inactive_count * pagesize; ++ let mem_laundry = v_laundry_count * pagesize; ++ ++ mem_info.total = v_page_count * pagesize; ++ mem_info.free = v_free_count * pagesize; ++ mem_info.available = mem_inactive + mem_laundry + mem_info.free; ++ ++// mem_info.swap_total = sys.total_swap(); ++// mem_info.swap_free = sys.free_swap(); ++ } ++ + #[cfg(target_vendor = "apple")] + { + let mut mib: [i32; 2] = [0, 0]; |