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
|
--- exo/exo-mount-point.c.orig 2007-01-20 15:58:22.000000000 +0200
+++ exo/exo-mount-point.c 2007-07-06 14:10:50.000000000 +0300
@@ -25,6 +25,9 @@
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
@@ -38,6 +41,7 @@
#include <sys/mount.h>
#endif
#ifdef HAVE_SYS_MNTTAB_H
+#include <stdio.h>
#include <sys/mnttab.h>
#endif
@@ -250,6 +254,33 @@
/* close the file handle */
fclose (fp);
+#elif defined(HAVE_GETVFSSTAT)
+ struct statvfs *mntbuf = NULL;
+ glong bufsize = 0;
+ gint mntsize;
+ gint n;
+
+ /* determine the number of active mount points */
+ mntsize = getvfsstat(NULL, 0, MNT_NOWAIT);
+ if (G_LIKELY(mntsize > 0)) {
+ /* allocate a new buffer */
+ bufsize = (mntsize + 4) * sizeof(*mntbuf);
+ mntbuf = (struct statvfs *)malloc(bufsize);
+
+ /* determine the mount point for the device file */
+ mntsize = getvfsstat(mntbuf, bufsize, ST_NOWAIT);
+ for (n = 0; n < mntsize; ++n) {
+ /* check if we have a match here */
+ exo_mount_point_add_if_matches(mask, device, folder, fstype,
+ mntbuf[n].f_mntfromname,
+ mntbuf[n].f_mntonname,
+ mntbuf[n].f_fstypename,
+ ((mntbuf[n].f_flag & MNT_RDONLY) != 0),
+ &mount_points);
+ }
+ /* release the buffer */
+ free(mntbuf);
+ }
#elif defined(HAVE_GETFSSTAT) /* BSD */
struct statfs *mntbuf = NULL;
glong bufsize = 0;
|