getmntent_r() is a GNU extension so we test for its existence and just disable this feature of system stats if it is not present, because this feature is not very important.
Signed-off-by: Ben Pfaff <b...@nicira.com> --- configure.ac | 2 +- vswitchd/system-stats.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 7af8afb..bbb6dea 100644 --- a/configure.ac +++ b/configure.ac @@ -60,7 +60,7 @@ OVS_CHECK_IF_DL OVS_CHECK_STRTOK_R AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec, struct stat.st_mtimensec], [], [], [[#include <sys/stat.h>]]) -AC_CHECK_FUNCS([mlockall strnlen strsignal getloadavg statvfs setmntent]) +AC_CHECK_FUNCS([mlockall strnlen strsignal getloadavg statvfs getmntent_r]) AC_CHECK_HEADERS([mntent.h sys/statvfs.h linux/types.h linux/if_ether.h]) OVS_CHECK_PKIDIR diff --git a/vswitchd/system-stats.c b/vswitchd/system-stats.c index 2e18b1b..842bc20 100644 --- a/vswitchd/system-stats.c +++ b/vswitchd/system-stats.c @@ -447,9 +447,11 @@ get_process_stats(struct smap *stats) static void get_filesys_stats(struct smap *stats OVS_UNUSED) { -#if HAVE_SETMNTENT && HAVE_STATVFS +#if HAVE_GETMNTENT_R && HAVE_STATVFS static const char file_name[] = "/etc/mtab"; + struct mntent mntent; struct mntent *me; + char buf[4096]; FILE *stream; struct ds s; @@ -460,7 +462,7 @@ get_filesys_stats(struct smap *stats OVS_UNUSED) } ds_init(&s); - while ((me = getmntent(stream)) != NULL) { + while ((me = getmntent_r(stream, &mntent, buf, sizeof buf)) != NULL) { unsigned long long int total, free; struct statvfs vfs; char *p; @@ -494,7 +496,7 @@ get_filesys_stats(struct smap *stats OVS_UNUSED) smap_add(stats, "file_systems", ds_cstr(&s)); } ds_destroy(&s); -#endif /* HAVE_SETMNTENT && HAVE_STATVFS */ +#endif /* HAVE_GETMNTENT_R && HAVE_STATVFS */ } #define SYSTEM_STATS_INTERVAL (5 * 1000) /* In milliseconds. */ -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev