|
@@ -1079,16 +1079,19 @@ int SDL_GetSystemRAM(void)
|
|
|
#endif
|
|
|
#ifdef HAVE_SYSCTLBYNAME
|
|
|
if (SDL_SystemRAM <= 0) {
|
|
|
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
|
|
|
-#ifdef HW_REALMEM
|
|
|
+#ifdef HW_PHYSMEM64
|
|
|
+ /* (64-bit): NetBSD since 2003, OpenBSD */
|
|
|
+ int mib[2] = { CTL_HW, HW_PHYSMEM64 };
|
|
|
+#elif defined(HW_REALMEM)
|
|
|
+ /* (64-bit): FreeBSD since 2005, DragonFly */
|
|
|
int mib[2] = { CTL_HW, HW_REALMEM };
|
|
|
+#elif defined(HW_MEMSIZE)
|
|
|
+ /* (64-bit): Darwin */
|
|
|
+ int mib[2] = { CTL_HW, HW_MEMSIZE };
|
|
|
#else
|
|
|
- /* might only report up to 2 GiB */
|
|
|
+ /* (32-bit): very old BSD, might only report up to 2 GiB */
|
|
|
int mib[2] = { CTL_HW, HW_PHYSMEM };
|
|
|
-#endif /* HW_REALMEM */
|
|
|
-#else
|
|
|
- int mib[2] = { CTL_HW, HW_MEMSIZE };
|
|
|
-#endif /* __FreeBSD__ || __FreeBSD_kernel__ */
|
|
|
+#endif /* HW_PHYSMEM64 */
|
|
|
Uint64 memsize = 0;
|
|
|
size_t len = sizeof(memsize);
|
|
|
|