>From 8def08e0879d55250931ca9ba38bed1735355608 Mon Sep 17 00:00:00 2001
From: Natanael Copa
Date: Fri, 18 Apr 2014 09:16:27 +0000
Subject: [PATCH] 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
---
ChangeLog | 8 ++++++++
lib/physmem.c | 21 ++++++++++++++++++++-
m4/physmem.m4 | 3 ++-
3 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index fb25112..36e0672 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-04-18 Natanael Copa
+
+ 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-17 Paul Eggert
regex: do not depend on malloc-gnu
diff --git a/lib/physmem.c b/lib/physmem.c
index 7a67fb3..d0989aa 100644
--- a/lib/physmem.c
+++ b/lib/physmem.c
@@ -32,8 +32,11 @@
# include
#endif
-#if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H
+#if HAVE_SYS_SYSINFO_H
# include
+#endif
+
+#if HAVE_MACHINE_HAL_SYSINFO_H
# include
#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 * si.mem_unit;
+ }
+#endif
+
#if HAVE_PSTAT_GETSTATIC
{ /* This works on hpux11. */
struct pst_static pss;
@@ -194,6 +205,14 @@ physmem_available (void)
}
#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;
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 ]])
AC_REQUIRE([gl_SYS__SYSTEM_CONFIGURATION])
])
--
1.7.7.6