Forráskód Böngészése

cpuinfo: Fix detection of physical memory above 2GB on NetBSD

Rework the code to clearly prefer 64-bit sysctls first, then
legacy sysctls, and eliminate a second ifdef.

Signed-off-by: Nia Alarie <nia@NetBSD.org>
nia 1 éve
szülő
commit
69cae07cc1
1 módosított fájl, 10 hozzáadás és 7 törlés
  1. 10 7
      src/cpuinfo/SDL_cpuinfo.c

+ 10 - 7
src/cpuinfo/SDL_cpuinfo.c

@@ -1011,16 +1011,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);