Module: wine Branch: master Commit: f40c5484fc4a1b52e51be267e853f902743cac98 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f40c5484fc4a1b52e51be267e8...
Author: Ken Thomases ken@codeweavers.com Date: Sun Feb 16 20:43:45 2014 -0600
kernel32: Use the Mach host_info(HOST_BASIC_INFO) API to obtain total RAM after trying sysctl(HW_MEMSIZE) and before HW_PHYSMEM.
---
dlls/kernel32/heap.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c index fb0b07d..cd3a752 100644 --- a/dlls/kernel32/heap.c +++ b/dlls/kernel32/heap.c @@ -40,6 +40,9 @@ #ifdef HAVE_UNISTD_H # include <unistd.h> #endif +#ifdef HAVE_MACH_MACH_H +#include <mach/mach.h> +#endif
#ifdef sun /* FIXME: Unfortunately swapctl can't be used with largefile.... */ @@ -1236,6 +1239,25 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex ) total = val64; #endif
+#ifdef HAVE_MACH_MACH_H + if (!total) + { + host_name_port_t host; + mach_msg_type_number_t count; + kern_return_t kr; + host_basic_info_data_t info; + + host = mach_host_self(); + + count = HOST_BASIC_INFO_COUNT; + kr = host_info(host, HOST_BASIC_INFO, (host_info_t)&info, &count); + if (kr == KERN_SUCCESS) + total = info.max_mem; + + mach_port_deallocate(mach_task_self(), host); + } +#endif + if (!total) { mib[1] = HW_PHYSMEM;