v / vlib / runtime / free_memory_impl_openbsd.c.v
29 lines · 26 sloc · 646 bytes · 0628bf32f1b7b68b122b6136734be5e7a9b4b435
Raw
1module runtime
2
3#include <sys/sysctl.h>
4#include <uvm/uvmexp.h>
5
6struct C.uvmexp {
7 pagesize int
8 free int
9}
10
11fn free_memory_impl() !usize {
12 $if cross ? {
13 return error('free_memory: not implemented')
14 }
15 $if !cross ? {
16 $if openbsd {
17 mib := [C.CTL_VM, C.VM_UVMEXP]!
18 mut uvm := C.uvmexp{0, 0}
19 mut len := usize(sizeof(C.uvmexp))
20 retval := unsafe { C.sysctl(&mib[0], mib.len, &uvm, &len, C.NULL, 0) }
21 c_errno := C.errno
22 if retval == -1 {
23 return error('free_memory: `C.sysctl()` return error code = ${c_errno}')
24 }
25 return usize(uvm.pagesize) * usize(uvm.free)
26 }
27 }
28 return error('free_memory: not implemented')
29}
30