From: David Zeuthen Date: Mon, 24 Oct 2011 16:58:10 +0000 (-0400) Subject: Add properties to identify extended and logical dos partitions X-Git-Tag: upstream/2.1.2~444 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cf40c75ad33cc41bccc1e54b7433a2552a7e08ce;p=platform%2Fupstream%2Fudisks2.git Add properties to identify extended and logical dos partitions This allows to remove special-casing of dos and 0x05, 0x0f and 0x85 partition types in each client. Signed-off-by: David Zeuthen --- diff --git a/data/org.freedesktop.UDisks2.xml b/data/org.freedesktop.UDisks2.xml index 0a61606..2b34f7e 100644 --- a/data/org.freedesktop.UDisks2.xml +++ b/data/org.freedesktop.UDisks2.xml @@ -811,6 +811,23 @@ object that the partition entry belongs to. --> + + + + + + diff --git a/doc/udisks2-sections.txt b/doc/udisks2-sections.txt index 5d54558..f119212 100644 --- a/doc/udisks2-sections.txt +++ b/doc/udisks2-sections.txt @@ -1158,19 +1158,23 @@ udisks_partition_get_flags udisks_partition_get_name udisks_partition_get_uuid udisks_partition_get_table +udisks_partition_get_is_container +udisks_partition_get_is_contained udisks_partition_dup_type_ udisks_partition_dup_flags udisks_partition_dup_name udisks_partition_dup_uuid udisks_partition_dup_table -udisks_partition_set_flags -udisks_partition_set_name udisks_partition_set_number +udisks_partition_set_type_ udisks_partition_set_offset udisks_partition_set_size -udisks_partition_set_table -udisks_partition_set_type_ +udisks_partition_set_flags +udisks_partition_set_name udisks_partition_set_uuid +udisks_partition_set_table +udisks_partition_set_is_container +udisks_partition_set_is_contained UDisksPartitionProxy UDisksPartitionProxyClass udisks_partition_proxy_new diff --git a/src/udiskslinuxpartition.c b/src/udiskslinuxpartition.c index fc9a699..2ea5902 100644 --- a/src/udiskslinuxpartition.c +++ b/src/udiskslinuxpartition.c @@ -119,6 +119,8 @@ udisks_linux_partition_update (UDisksLinuxPartition *partition, const gchar *uuid = NULL; const gchar *flags = NULL; const gchar *table_object_path = "/"; + gboolean is_container = FALSE; + gboolean is_contained = FALSE; device = udisks_linux_block_object_get_device (object); if (g_udev_device_has_property (device, "ID_PART_ENTRY_TYPE")) @@ -142,6 +144,22 @@ udisks_linux_partition_update (UDisksLinuxPartition *partition, makedev (disk_major, disk_minor)); } } + + if (g_strcmp0 (g_udev_device_get_property (device, "ID_PART_ENTRY_SCHEME"), "dos") == 0) + { + if (number <= 4) + { + gint type_as_int = strtol (type, NULL, 0); + if (type_as_int == 0x05 || type_as_int == 0x0f || type_as_int == 0x85) + { + is_container = TRUE; + } + } + else if (number >= 5) + { + is_contained = TRUE; + } + } } else { @@ -169,6 +187,8 @@ udisks_linux_partition_update (UDisksLinuxPartition *partition, udisks_partition_set_name (UDISKS_PARTITION (partition), name); udisks_partition_set_uuid (UDISKS_PARTITION (partition), uuid); udisks_partition_set_table (UDISKS_PARTITION (partition), table_object_path); + udisks_partition_set_is_container (UDISKS_PARTITION (partition), is_container); + udisks_partition_set_is_contained (UDISKS_PARTITION (partition), is_contained); g_free (name); g_clear_object (&device);