* lib/physmem.c (physmem_total): Some systems like musl libc does not (yet) support _SC_PHYS_PAGES. Use the linux syscall sysinfo as fallback if _SC_PHYS_PAGES or _SC_PAGESIZE fails.
Signed-off-by: Natanael Copa <[email protected]> --- Changes since v1: - prefer use _SC_PHYS_PAGES * _SC_PAGESIZE if available and use sysinfo as fallback. - check for and use mem_unit, member of struct sysinfo. lib/physmem.c | 13 ++++++++++++- m4/physmem.m4 | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/physmem.c b/lib/physmem.c index 7a67fb3..53afdd9 100644 --- a/lib/physmem.c +++ b/lib/physmem.c @@ -32,8 +32,11 @@ # include <sys/sysmp.h> #endif -#if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H +#if HAVE_SYS_SYSINFO_H # include <sys/sysinfo.h> +#endif + +#if HAVE_MACHINE_HAL_SYSINFO_H # include <machine/hal_sysinfo.h> #endif @@ -90,6 +93,14 @@ physmem_total (void) } #endif +#if HAVE_SYSINFO && HAVE_STRUCT_SYSINFO_MEM_UNIT + { /* This works on linux */ + struct sysinfo si; + if (sysinfo(&si) == 0) + return (double) si.totalram * (double) si.mem_unit; + } +#endif + #if HAVE_PSTAT_GETSTATIC { /* This works on hpux11. */ struct pst_static pss; diff --git a/m4/physmem.m4 b/m4/physmem.m4 index ff3d268..a1179eb 100644 --- a/m4/physmem.m4 +++ b/m4/physmem.m4 @@ -40,6 +40,7 @@ AC_DEFUN([gl_PHYSMEM], #endif ]) - AC_CHECK_FUNCS([pstat_getstatic pstat_getdynamic sysmp getsysinfo sysctl table]) + AC_CHECK_FUNCS([pstat_getstatic pstat_getdynamic sysmp getsysinfo sysctl table sysinfo]) + AC_CHECK_MEMBERS([struct sysinfo.mem_unit],,, [[#include <sys/sysinfo.h>]]) AC_REQUIRE([gl_SYS__SYSTEM_CONFIGURATION]) ]) -- 1.9.2
