$NetBSD: patch-ak,v 1.2 2008/05/27 21:22:02 tonnerre Exp $ --- gl/mountlist.c.orig 2007-01-24 23:47:25.000000000 +0100 +++ gl/mountlist.c @@ -57,7 +57,11 @@ char *strstr (); # 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 */ @@ -104,6 +108,10 @@ char *strstr (); # include #endif +#ifdef HAVE_SYS_STATVFS_H +#include +#endif + #ifdef MOUNTED_LISTMNTENT # include #endif @@ -178,7 +186,7 @@ char *strstr (); #if MOUNTED_GETMNTINFO -# if ! HAVE_STRUCT_STATFS_F_FSTYPENAME +# if ! HAVE_STRUCT_STATFS_F_FSTYPENAME && ! STAT_STATVFS static char * fstype_to_string (short int t) { @@ -275,9 +283,13 @@ fstype_to_string (short int t) # endif static char * +#ifdef STAT_STATVFS +fsp_to_string (const struct statvfs *fsp) +#else fsp_to_string (const struct statfs *fsp) +#endif { -# if HAVE_STRUCT_STATFS_F_FSTYPENAME +# if defined HAVE_STRUCT_STATFS_F_FSTYPENAME || defined STAT_STATVFS return (char *) (fsp->f_fstypename); # else return fstype_to_string (fsp->f_type); @@ -413,7 +425,11 @@ read_file_system_list (bool need_fs_type #ifdef MOUNTED_GETMNTINFO /* 4.4BSD. */ { +#ifdef STAT_STATVFS + struct statvfs *fsp; +#else struct statfs *fsp; +#endif int entries; entries = getmntinfo (&fsp, MNT_NOWAIT); @@ -601,9 +617,17 @@ read_file_system_list (bool need_fs_type { 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) @@ -666,10 +690,18 @@ read_file_system_list (bool need_fs_type # 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);