$NetBSD: patch-ak,v 1.1.1.1 2006/02/18 17:21:58 bouyer Exp $

--- lib/mountlist.c.orig	2005-10-14 22:09:29.000000000 +0200
+++ lib/mountlist.c	2005-10-14 22:23:14.000000000 +0200
@@ -66,7 +66,11 @@
 # if HAVE_STRUCT_FSSTAT_F_FSTYPENAME
 #  define FS_TYPE(Ent) ((Ent).f_fstypename)
 # else
-#  define FS_TYPE(Ent) mnt_names[(Ent).f_type]
+#  ifdef STAT_STATVFS
+#   define FS_TYPE(Ent) mnt_names[(Ent).f_fsid]
+#  else
+#   define FS_TYPE(Ent) mnt_names[(Ent).f_type]
+#  endif
 # endif
 #endif /* MOUNTED_GETFSSTAT */
 
@@ -109,6 +113,10 @@
 # include <sys/statfs.h>
 #endif
 
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+
 #ifdef MOUNTED_LISTMNTENT
 # include <mntent.h>
 #endif
@@ -173,7 +181,7 @@
 
 #if MOUNTED_GETMNTINFO
 
-# if ! HAVE_F_FSTYPENAME_IN_STATFS
+# if ! HAVE_F_FSTYPENAME_IN_STATFS && ! STAT_STATVFS
 static char *
 fstype_to_string (short t)
 {
@@ -271,12 +279,16 @@
 
 /* __NetBSD__ || BSD_NET2 || __OpenBSD__ */
 static char *
+#ifdef STAT_STATVFS
+fsp_to_string (const struct statvfs *fsp)
+#else
 fsp_to_string (const struct statfs *fsp)
+#endif
 {
-# if defined HAVE_F_FSTYPENAME_IN_STATFS
+# if defined HAVE_F_FSTYPENAME_IN_STATFS || defined STAT_STATVFS
   return (char *) (fsp->f_fstypename);
 # else
-  return fstype_to_string (fsp->f_type);
+   return fstype_to_string (fsp->f_type);
 # endif
 }
 
@@ -381,7 +393,11 @@
 
 #ifdef MOUNTED_GETMNTINFO	/* 4.4BSD.  */
   {
+#ifdef STAT_STATVFS
+    struct statvfs *fsp;
+#else
     struct statfs *fsp;
+#endif
     int entries;
 
     entries = getmntinfo (&fsp, MNT_NOWAIT);
@@ -543,9 +559,17 @@
   {
     int numsys, counter;
     size_t bufsize;
+#ifdef STAT_STATVFS
+    struct statvfs *stats;
+#else
     struct statfs *stats;
+#endif
 
+#ifdef STAT_STATVFS
+    numsys = getfsstat ((struct statvfs *)0, 0L, MNT_NOWAIT);
+#else
     numsys = getfsstat ((struct statfs *)0, 0L, MNT_NOWAIT);
+#endif
     if (numsys < 0)
       return (NULL);
     if (SIZE_MAX / sizeof *stats <= numsys)
@@ -608,10 +632,18 @@
 # ifdef GETFSTYP			/* SVR3.  */
 	if (need_fs_type)
 	  {
+#ifdef STAT_STATVFS
+	    struct statvfs fsd;
+#else
 	    struct statfs fsd;
+#endif
 	    char typebuf[FSTYPSZ];
 
+#ifdef STAT_STATVFS
+	    if (statvfs (me->me_mountdir, &fsd, sizeof fsd, 0) != -1
+#else
 	    if (statfs (me->me_mountdir, &fsd, sizeof fsd, 0) != -1
+#endif
 		&& sysfs (GETFSTYP, fsd.f_fstyp, typebuf) != -1)
 	      {
 		me->me_type = xstrdup (typebuf);
