summaryrefslogtreecommitdiff
path: root/x11/xfce4-exo/patches/patch-ad
blob: c2f2d3a60031e93d9d58d3b8ce3f305869e1579f (plain)
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;