[gvfs/wip/oholy/x-gvfs-notrash: 8/9] trash: Add support for x-gvfs-notrash option to ignore mounts




commit f93bd46c36c8e42f17f0f61b79c55a3794906395
Author: Ondrej Holy <oholy redhat com>
Date:   Fri Mar 6 10:08:09 2020 +0100

    trash: Add support for x-gvfs-notrash option to ignore mounts
    
    Add support for x-gvfs-notrash mount option, which allows to ignore
    trash folder on certain mounts. This might be especially useful e.g.
    to prevent wakeups of autofs mounts...
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1096200

 daemon/trashlib/trashwatcher.c | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)
---
diff --git a/daemon/trashlib/trashwatcher.c b/daemon/trashlib/trashwatcher.c
index 6b4552353..01c440a1e 100644
--- a/daemon/trashlib/trashwatcher.c
+++ b/daemon/trashlib/trashwatcher.c
@@ -211,6 +211,34 @@ trash_mount_remove (TrashMount **mount_ptr)
   g_slice_free (TrashMount, mount);
 }
 
+static gboolean
+ignore_trash_mount (GUnixMountEntry *mount)
+{
+  GUnixMountPoint *mount_point = NULL;
+  const gchar *mount_options;
+  gboolean retval = TRUE;
+
+  if (g_unix_mount_is_system_internal (mount))
+    return TRUE;
+
+  mount_options = g_unix_mount_get_options (mount);
+  if (mount_options == NULL)
+    {
+      mount_point = g_unix_mount_point_at (g_unix_mount_get_mount_path (mount),
+                                           NULL);
+      if (mount_point != NULL)
+        mount_options = g_unix_mount_point_get_options (mount_point);
+    }
+
+  if (mount_options == NULL ||
+      strstr (mount_options, "x-gvfs-notrash") == NULL)
+    retval = FALSE;
+
+  g_clear_pointer (&mount_point, g_unix_mount_point_free);
+
+  return retval;
+}
+
 static void
 trash_watcher_remount (TrashWatcher *watcher)
 {
@@ -229,7 +257,7 @@ trash_watcher_remount (TrashWatcher *watcher)
     {
       int result;
 
-      if (new && g_unix_mount_is_system_internal (new->data))
+      if (new && ignore_trash_mount (new->data))
         {
           g_unix_mount_free (new->data);
           new = new->next;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]