gvfs r1746 - in branches/gnome-2-22: . hal



Author: davidz
Date: Fri Apr 18 06:11:00 2008
New Revision: 1746
URL: http://svn.gnome.org/viewvc/gvfs?rev=1746&view=rev

Log:
2008-04-16  David Zeuthen  <davidz redhat com>

        * hal/ghalvolumemonitor.c: (should_mount_be_ignored),
        (should_volume_be_ignored), (update_mounts):

        Avoid having GVolume and GMount objects for mounts for which the
        mount point will make g_unix_mount_guess_should_display() return
        FALSE. This fixes a problem where e.g. live cd installers mounts
        some file system somewhere (e.g. a /boot partition at
        /mnt/installer_boot).



Modified:
   branches/gnome-2-22/ChangeLog
   branches/gnome-2-22/hal/ghalvolumemonitor.c

Modified: branches/gnome-2-22/hal/ghalvolumemonitor.c
==============================================================================
--- branches/gnome-2-22/hal/ghalvolumemonitor.c	(original)
+++ branches/gnome-2-22/hal/ghalvolumemonitor.c	Fri Apr 18 06:11:00 2008
@@ -845,6 +845,32 @@
 }
 
 static gboolean
+should_mount_be_ignored (HalPool *pool, HalDevice *d)
+{
+  const char *device_mount_point;
+
+  device_mount_point = hal_device_get_property_string (d, "volume.mount_point");
+  if (device_mount_point != NULL && strlen (device_mount_point) > 0)
+    {
+      GUnixMountEntry *mount_entry;
+
+      /*g_warning ("device_mount_point = '%s'", device_mount_point);*/
+
+      mount_entry = g_unix_mount_at (device_mount_point, NULL);
+      if (mount_entry != NULL) {
+        if (!g_unix_mount_guess_should_display (mount_entry))
+          {
+            g_unix_mount_free (mount_entry);
+            return TRUE;
+          }
+        g_unix_mount_free (mount_entry);
+      }
+    }
+
+  return FALSE;
+}
+
+static gboolean
 should_volume_be_ignored (HalPool *pool, HalDevice *d, GList *fstab_mount_points)
 {
   gboolean volume_ignore;
@@ -893,6 +919,9 @@
   if (mount_point != NULL && !_g_unix_mount_point_guess_should_display (mount_point))
     return TRUE;
 
+  if (hal_device_get_property_bool (d, "volume.is_mounted"))
+    return should_mount_be_ignored (pool, d);
+
   return FALSE;
 }
 
@@ -1207,13 +1236,29 @@
 {
   GList *new_mounts;
   GList *removed, *added;
-  GList *l;
+  GList *l, *ll;
   GHalMount *mount;
   GHalVolume *volume;
   const char *device_path;
   const char *mount_path;
   
   new_mounts = g_unix_mounts_get (NULL);
+
+  /* remove mounts we want to ignore - we do it here so we get to reevaluate
+   * on the next update whether they should still be ignored
+   */
+  for (l = new_mounts; l != NULL; l = ll)
+    {
+      GUnixMountEntry *mount_entry = l->data;
+      ll = l->next;
+
+      /* keep in sync with should_mount_be_ignored() */
+      if (!g_unix_mount_guess_should_display (mount_entry))
+        {
+          g_unix_mount_free (mount_entry);
+          new_mounts = g_list_delete_link (new_mounts, l);
+        }
+    }
   
   new_mounts = g_list_sort (new_mounts, (GCompareFunc) g_unix_mount_compare);
   



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