Ken Thomases : kernel32: Prefer HW_MEMSIZE sysctl variable over HW_PHYSMEM , if available, since it's 64 bits.

Alexandre Julliard julliard at winehq.org
Mon Feb 17 13:45:14 CST 2014


Module: wine
Branch: master
Commit: 95df19efed1c6b31beedf556adb18cea63bd92ac
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=95df19efed1c6b31beedf556adb18cea63bd92ac

Author: Ken Thomases <ken at codeweavers.com>
Date:   Sun Feb 16 20:43:38 2014 -0600

kernel32: Prefer HW_MEMSIZE sysctl variable over HW_PHYSMEM, if available, since it's 64 bits.

---

 dlls/kernel32/heap.c |   28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c
index c88d31c..646890a 100644
--- a/dlls/kernel32/heap.c
+++ b/dlls/kernel32/heap.c
@@ -1147,6 +1147,7 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
 #ifdef linux
     FILE *f;
 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
+    DWORDLONG total;
 #ifdef __APPLE__
     unsigned int val;
 #else
@@ -1154,6 +1155,9 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
 #endif
     int mib[2];
     size_t size_sys;
+#ifdef HW_MEMSIZE
+    uint64_t val64;
+#endif
 #elif defined(sun)
     unsigned long pagesize,maxpages,freepages,swapspace,swapfree;
     struct anoninfo swapinf;
@@ -1219,11 +1223,27 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
         fclose( f );
     }
 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
+    total = 0;
+
     mib[0] = CTL_HW;
-    mib[1] = HW_PHYSMEM;
-    size_sys = sizeof(val);
-    if (!sysctl(mib, 2, &val, &size_sys, NULL, 0) && size_sys == sizeof(val) && val)
-        lpmemex->ullTotalPhys = val;
+#ifdef HW_MEMSIZE
+    mib[1] = HW_MEMSIZE;
+    size_sys = sizeof(val64);
+    if (!sysctl(mib, 2, &val64, &size_sys, NULL, 0) && size_sys == sizeof(val64) && val64)
+        total = val64;
+#endif
+
+    if (!total)
+    {
+        mib[1] = HW_PHYSMEM;
+        size_sys = sizeof(val);
+        if (!sysctl(mib, 2, &val, &size_sys, NULL, 0) && size_sys == sizeof(val) && val)
+            total = val;
+    }
+
+    if (total)
+        lpmemex->ullTotalPhys = total;
+
     mib[1] = HW_USERMEM;
     size_sys = sizeof(val);
     if (!sysctl(mib, 2, &val, &size_sys, NULL, 0) && size_sys == sizeof(val) && val)




More information about the wine-cvs mailing list