From: Ken Thomases Subject: [PATCH 5/7] kernel32: Use sysctl(VM_SWAPUSAGE) to get swap sizes on BSDs, if available. Message-Id: <182356B9-8357-4F59-89DA-F7F27E341A76@codeweavers.com> Date: Sun, 16 Feb 2014 20:43:42 -0600 --- dlls/kernel32/heap.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c index 646890a..fb0b07d 100644 --- a/dlls/kernel32/heap.c +++ b/dlls/kernel32/heap.c @@ -1158,6 +1158,9 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex ) #ifdef HW_MEMSIZE uint64_t val64; #endif +#ifdef VM_SWAPUSAGE + struct xsw_usage swap; +#endif #elif defined(sun) unsigned long pagesize,maxpages,freepages,swapspace,swapfree; struct anoninfo swapinf; @@ -1253,6 +1256,17 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex ) lpmemex->ullTotalPageFile = lpmemex->ullAvailPhys; lpmemex->ullAvailPageFile = lpmemex->ullAvailPhys; + +#ifdef VM_SWAPUSAGE + mib[0] = CTL_VM; + mib[1] = VM_SWAPUSAGE; + size_sys = sizeof(swap); + if (!sysctl(mib, 2, &swap, &size_sys, NULL, 0) && size_sys == sizeof(swap)) + { + lpmemex->ullTotalPageFile = swap.xsu_total; + lpmemex->ullAvailPageFile = swap.xsu_avail; + } +#endif #elif defined ( sun ) pagesize=sysconf(_SC_PAGESIZE); maxpages=sysconf(_SC_PHYS_PAGES);