From 36c7975c80bb1d43dbc4365670f2e5bce6055cbe Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 23 Oct 2006 18:16:29 +0200 Subject: [PATCH] src/urils_mount.c: Use `getvfsstat' on NetBSD, if available. --- configure.in | 2 +- src/utils_mount.c | 39 +++++++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/configure.in b/configure.in index f187cf38..679127e5 100644 --- a/configure.in +++ b/configure.in @@ -323,7 +323,7 @@ AC_CHECK_FUNCS(getifaddrs) # For mount interface AC_CHECK_FUNCS(getfsent getvfsent listmntent) -AC_CHECK_FUNCS(getfsstat) +AC_CHECK_FUNCS(getfsstat getvfsstat) # Check for different versions of `getmntent' here.. AC_FUNC_GETMNTENT diff --git a/src/utils_mount.c b/src/utils_mount.c index 176714ce..ed3fecaf 100644 --- a/src/utils_mount.c +++ b/src/utils_mount.c @@ -43,7 +43,15 @@ # if HAVE_SYS_MOUNT_H # include # endif -#endif /* HAVE_GETMNTINFO */ +/* #endif HAVE_GETFSSTAT */ +#elif HAVE_GETVFSSTAT +# if HAVE_SYS_TYPES_H +# include +# endif +# if HAVE_SYS_STATVFS_H +# include +# endif +#endif /* HAVE_GETVFSSTAT */ #if HAVE_MNTENT_H # include @@ -413,12 +421,23 @@ static cu_mount_t *cu_mount_listmntent (void) } /* cu_mount_t *cu_mount_listmntent(void) */ /* #endif HAVE_LISTMNTENT */ -/* 4.4BSD and Mac OS X */ -#elif HAVE_GETFSSTAT +/* 4.4BSD and Mac OS X (getfsstat) or NetBSD (getvfsstat) */ +#elif HAVE_GETFSSTAT || HAVE_GETVFSSTAT static cu_mount_t *cu_mount_getfsstat (void) { +#if HAVE_GETFSSTAT +# define STRUCT_STATFS struct statfs +# define CMD_STATFS getfsstat +# define FLAGS_STATFS MNT_NOWAIT +/* #endif HAVE_GETFSSTAT */ +#elif HAVE_GETVFSSTAT +# define STRUCT_STATFS struct statvfs +# define CMD_STATFS getvfsstat +# define FLAGS_STATFS ST_NOWAIT +#endif /* HAVE_GETVFSSTAT */ + int bufsize; - struct statfs *buf; + STRUCT_STATFS *buf; int num; int i; @@ -428,22 +447,22 @@ static cu_mount_t *cu_mount_getfsstat (void) cu_mount_t *new = NULL; /* Get the number of mounted file systems */ - if ((bufsize = getfsstat (NULL, 0, MNT_NOWAIT)) < 1) + if ((bufsize = CMD_STATFS (NULL, 0, FLAGS_STATFS)) < 1) { - DBG ("getfsstat failed: %s", strerror (errno)); + DBG (CMD_STATFS" failed: %s", strerror (errno)); return (NULL); } - if ((buf = (struct statfs *) malloc (bufsize * sizeof (struct statfs))) + if ((buf = (STRUCT_STATFS *) malloc (bufsize * sizeof (STRUCT_STATFS))) == NULL) return (NULL); - memset (buf, '\0', bufsize * sizeof (struct statfs)); + memset (buf, '\0', bufsize * sizeof (STRUCT_STATFS)); /* The bufsize needs to be passed in bytes. Really. This is not in the * manpage.. -octo */ - if ((num = getfsstat (buf, bufsize * sizeof (struct statfs), MNT_NOWAIT)) < 1) + if ((num = CMD_STATFS (buf, bufsize * sizeof (STRUCT_STATFS), FLAGS_STATFS)) < 1) { - DBG ("getfsstat failed: %s", strerror (errno)); + DBG (CMD_STATFS" failed: %s", strerror (errno)); free (buf); return (NULL); } -- 2.30.2