1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
$NetBSD: patch-ak,v 1.2 2008/05/27 21:22:03 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 <sys/statfs.h>
#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+
#ifdef MOUNTED_LISTMNTENT
# include <mntent.h>
#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);
|