Bug 26996 — wrongly detects partition on unpartitioned VFAT device
authorMartin Pitt <martin.pitt@ubuntu.com>
Fri, 12 Mar 2010 16:42:25 +0000 (17:42 +0100)
committerMartin Pitt <martin.pitt@ubuntu.com>
Fri, 12 Mar 2010 16:42:25 +0000 (17:42 +0100)
A standard VFAT header matches the signature of an MBR, so we detected VFAT
file systems on raw unpartitioned devices as both VFAT and MBR partition table.
This confuses gnome-disk-utility/gvfs, and causes them to be ignored in GNOME.

The standard approach in the kernel/blkid is to only detect an MBR if it does
not have a valid VFAT signature. Since blkid already does that for us, do not
output PARTITION_TABLE properties in udisks-part-id if we already know that we
have a valid ID_FS_TYPE.

src/probers/part-id.c

index 311efbc..0048f7d 100644 (file)
@@ -515,9 +515,17 @@ main (int argc,
     }
   else
     {
-      g_print ("UDISKS_PARTITION_TABLE=1\n");
-      g_print ("UDISKS_PARTITION_TABLE_SCHEME=%s\n", part_get_scheme_name (part_table_get_scheme (partition_table)));
-      g_print ("UDISKS_PARTITION_TABLE_COUNT=%d\n", count_entries (partition_table));
+      /* We need to be careful here: a VFAT header matches the specs for a
+       * partitionless MBR header, so we must not advertise a VFAT device as a
+       * partition table; in general, if we already know that a device has a
+       * file system, it can't also be a partition table. */
+      const char* fs = NULL;
+      fs = udev_device_get_property_value (device, "ID_FS_TYPE");
+      if (fs == NULL || *fs == '\0') {
+         g_print ("UDISKS_PARTITION_TABLE=1\n");
+         g_print ("UDISKS_PARTITION_TABLE_SCHEME=%s\n", part_get_scheme_name (part_table_get_scheme (partition_table)));
+         g_print ("UDISKS_PARTITION_TABLE_COUNT=%d\n", count_entries (partition_table));
+      }
     }
 
  out: