[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <87632ql0pg.fsf@violet.siamics.net>
Date: Sat, 15 May 2010 02:53:15 +0700
From: Ivan Shmakov <ivan@...n.uusia.org>
To: linux-ext4@...r.kernel.org
Cc: Ivan Shmakov <oneingray@...il.com>
Subject: [PATCH] libblkid: support for GUID Partition Table (GPT), please?
GPT contains a supposed to be unique “Disk GUID” field, which
allows for the media bearing such a partition table to be
identified.
May I suggest adding support for GPT to libblkid? An
alpha-quality patch is MIME'd.
--
FSF associate member #7257
diff --git a/lib/blkid/probe.c b/lib/blkid/probe.c
index 6b75732..0e6c70d 100644
--- a/lib/blkid/probe.c
+++ b/lib/blkid/probe.c
@@ -1383,6 +1383,28 @@ static int probe_btrfs(struct blkid_probe *probe,
set_uuid(probe->dev, bs->fsid, 0);
return 0;
}
+
+static int probe_gpt (struct blkid_probe *probe,
+ struct blkid_magic *id,
+ unsigned char *buf)
+{
+ struct gpt_header *gh
+ = (struct gpt_header *)(buf + 0x200);
+
+ /* FIXME: check gh->header_crc32 */
+
+ {
+ __u64 uuid;
+ char uuid_str[17];
+
+ uuid = blkid_le64 (*((__u64 *)gh->disk_guid));
+ sprintf (uuid_str, "%016llX", uuid);
+ blkid_set_tag (probe->dev, "UUID", uuid_str, 0);
+ }
+
+ return 0;
+}
+
/*
* Various filesystem magics that we can check for. Note that kboff and
* sboff are in kilobytes and bytes respectively. All magics are in
@@ -1482,6 +1504,7 @@ static struct blkid_magic type_array[] = {
{ "lvm2pv", 1, 0x018, 8, "LVM2 001", probe_lvm2 },
{ "lvm2pv", 1, 0x218, 8, "LVM2 001", probe_lvm2 },
{ "btrfs", 64, 0x40, 8, "_BHRfS_M", probe_btrfs },
+ { "gpt", 0, 0x200, 8, "EFI PART", probe_gpt },
{ NULL, 0, 0, 0, NULL, NULL }
};
diff --git a/lib/blkid/probe.h b/lib/blkid/probe.h
index 37fc9c0..4d39b84 100644
--- a/lib/blkid/probe.h
+++ b/lib/blkid/probe.h
@@ -725,6 +725,28 @@ struct btrfs_super_block {
__u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
} __attribute__ ((__packed__));
+struct gpt_header {
+ /* references:
+ * * linux/include/linux/efi.h;
+ * * Wikipedia entry.
+ */
+ __u64 signature;
+ __u32 revision;
+ __u32 header_size;
+ __u32 header_crc32;
+ __u32 reserved1;
+ __u64 my_lba;
+ __u64 alternate_lba;
+ __u64 first_usable_lba;
+ __u64 last_usable_lba;
+ __u8 disk_guid[16];
+ __u64 partition_entry_lba;
+ __u32 num_partition_entries;
+ __u32 sizeof_partition_entry;
+ __u32 partition_entry_array_crc32;
+ __u8 reserved2[512 - 92];
+} __attribute__ ((__packed__));
+
/*
* Byte swap functions
*/
Content of type "application/pgp-signature" skipped
Powered by blists - more mailing lists