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