Mercurial > gnulib
changeset 17648:10089b66b66e
physmem: use sysinfo if _SC_PHYS_PAGES unavailable
* lib/physmem.c (physmem_total): Some systems like musl libc do not
(yet) support _SC_PHYS_PAGES. Use the linux syscall sysinfo as fallback
if _SC_PHYS_PAGES or _SC_PAGESIZE fails.
(physmem_available): Likewise for _SC_AVPHYS_PAGES.
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
author | Natanael Copa <ncopa@alpinelinux.org> |
---|---|
date | Fri, 18 Apr 2014 09:16:27 +0000 |
parents | 8d4f74d33135 |
children | eb299235d783 |
files | ChangeLog lib/physmem.c m4/physmem.m4 |
diffstat | 3 files changed, 30 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri Apr 18 22:29:55 2014 -0700 +++ b/ChangeLog Fri Apr 18 09:16:27 2014 +0000 @@ -1,3 +1,11 @@ +2014-04-18 Natanael Copa <ncopa@alpinelinux.org> + + physmem: use sysinfo on linux-gnu if _SC_PHYS_PAGES unavailable + * lib/physmem.c (physmem_total): Some systems like musl libc don't yet + support _SC_PHYS_PAGES. Use the linux syscall sysinfo as fallback + if _SC_PHYS_PAGES or _SC_PAGESIZE fails. + (physmem_available): Likewise for _SC_AVPHYS_PAGES. + 2014-04-18 Paul Eggert <eggert@cs.ucla.edu> exclude: port to strict C99
--- a/lib/physmem.c Fri Apr 18 22:29:55 2014 -0700 +++ b/lib/physmem.c Fri Apr 18 09:16:27 2014 +0000 @@ -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 @@ } #endif +#if HAVE_SYSINFO && HAVE_STRUCT_SYSINFO_MEM_UNIT + { /* This works on linux. */ + struct sysinfo si; + if (sysinfo(&si) == 0) + return (double) si.totalram * si.mem_unit; + } +#endif + #if HAVE_PSTAT_GETSTATIC { /* This works on hpux11. */ struct pst_static pss; @@ -194,6 +205,14 @@ } #endif +#if HAVE_SYSINFO && HAVE_STRUCT_SYSINFO_MEM_UNIT + { /* This works on linux. */ + struct sysinfo si; + if (sysinfo(&si) == 0) + return ((double) si.freeram + si.bufferram) * si.mem_unit; + } +#endif + #if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC { /* This works on hpux11. */ struct pst_static pss;
--- a/m4/physmem.m4 Fri Apr 18 22:29:55 2014 -0700 +++ b/m4/physmem.m4 Fri Apr 18 09:16:27 2014 +0000 @@ -40,6 +40,7 @@ #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]) ])