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>
(cherry picked from commit 69cae07cc1)
This commit is contained in:
nia 2023-11-12 20:22:23 +01:00 committed by Sam Lantinga
parent 63e9827b90
commit 92d70f4167
1 changed files with 11 additions and 8 deletions

View File

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