|
4 | 4 | #include <string.h> |
5 | 5 | #include <mach/mach.h> |
6 | 6 |
|
7 | | -void ffDetectMemoryImpl(FFMemoryResult* memory) |
| 7 | +static void detectRam(FFMemoryStorage* ram) |
8 | 8 | { |
9 | | - memset(memory, 0, sizeof(FFMemoryResult)); |
10 | | - |
11 | 9 | memory->ram.bytesTotal = (uint64_t) ffSysctlGetInt64("hw.memsize", 0); |
| 10 | + if(ram->bytesTotal == 0) |
| 11 | + { |
| 12 | + ffStrbufAppendS(&ram->error, "Failed to read hw.memsize"); |
| 13 | + return; |
| 14 | + } |
12 | 15 |
|
13 | 16 | uint32_t pagesize = (uint32_t) ffSysctlGetInt("hw.pagesize", 0); |
14 | 17 | if(pagesize == 0) |
| 18 | + { |
| 19 | + ffStrbufAppendS(&ram->error, "Failed to read hw.pagesize"); |
15 | 20 | return; |
| 21 | + } |
16 | 22 |
|
17 | 23 | mach_msg_type_number_t count = HOST_VM_INFO_COUNT; |
18 | 24 | vm_statistics_data_t vmstat; |
19 | 25 | if(host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t) (&vmstat), &count) != KERN_SUCCESS) |
| 26 | + { |
| 27 | + ffStrbufAppendS(&ram->error, "Failed to read vm statistics"); |
20 | 28 | return; |
| 29 | + } |
21 | 30 |
|
22 | 31 | memory->ram.bytesUsed = ((uint64_t) vmstat.active_count + vmstat.wire_count) * pagesize; |
| 32 | +} |
23 | 33 |
|
| 34 | +static void detectSwap(FFMemoryStorage* swap) |
| 35 | +{ |
24 | 36 | struct xsw_usage swap; |
25 | 37 | size_t size = sizeof(swap); |
26 | | - if (sysctlbyname("vm.swapusage", &swap, &size, 0, 0) == -1) |
| 38 | + if(sysctlbyname("vm.swapusage", &swap, &size, 0, 0) != 0) |
| 39 | + { |
| 40 | + ffStrbufAppendS(&swap->error, "Failed to read vm.swapusage"); |
27 | 41 | return; |
| 42 | + } |
| 43 | + |
28 | 44 | memory->swap.bytesTotal = swap.xsu_total; |
29 | 45 | memory->swap.bytesUsed = swap.xsu_used; |
30 | 46 | } |
| 47 | + |
| 48 | +void ffDetectMemoryImpl(FFMemoryResult* memory) |
| 49 | +{ |
| 50 | + detectRam(&memory->ram); |
| 51 | + detectSwap(&memory->swap); |
| 52 | +} |
0 commit comments