| 1 | module runtime |
| 2 | |
| 3 | fn C.sysctlnametomib(name charptr, mib &int, len &usize) i32 |
| 4 | |
| 5 | fn free_memory_impl() !usize { |
| 6 | $if cross ? { |
| 7 | return error('free_memory: not implemented') |
| 8 | } |
| 9 | $if !cross ? { |
| 10 | $if freebsd { |
| 11 | page_size := usize(C.sysconf(C._SC_PAGESIZE)) |
| 12 | c_errno_1 := C.errno |
| 13 | if page_size == usize(-1) { |
| 14 | return error('free_memory: `C.sysconf()` return error code = ${c_errno_1}') |
| 15 | } |
| 16 | mut mib := [4]int{} |
| 17 | mut len := usize(4) |
| 18 | retval_2 := unsafe { |
| 19 | C.sysctlnametomib(c'vm.stats.vm.v_free_count', &mib[0], &len) |
| 20 | } |
| 21 | c_errno_2 := C.errno |
| 22 | if retval_2 == -1 { |
| 23 | return error('free_memory: `C.sysctlnametomib()` return error code = ${c_errno_2}') |
| 24 | } |
| 25 | mut free_pages := int(0) |
| 26 | bufsize := usize(4) |
| 27 | retval_3 := unsafe { |
| 28 | C.sysctl(&mib[0], mib.len, &free_pages, &bufsize, 0, 0) |
| 29 | } |
| 30 | c_errno_3 := C.errno |
| 31 | if retval_3 == -1 { |
| 32 | return error('free_memory: `C.sysctl()` return error code = ${c_errno_3}') |
| 33 | } |
| 34 | return page_size * usize(free_pages) |
| 35 | } |
| 36 | } |
| 37 | return error('free_memory: not implemented') |
| 38 | } |
| 39 | |