This patch adds a function to provide partition PARTUUID on GPT formatted disks by extracting 16 bytes GUID from corresponding GPT entry and formatting it similarly to 'blkid' output.
Signed-off-by: Vitaly Kuzmichev <vitaly.kuzmic...@rtsoft.de> --- grub-core/partmap/gpt.c | 36 ++++++++++++++++++++++++++++++++++++ include/grub/gpt_partition.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/grub-core/partmap/gpt.c b/grub-core/partmap/gpt.c index 877ceefc3..b43f46987 100644 --- a/grub-core/partmap/gpt.c +++ b/grub-core/partmap/gpt.c @@ -22,6 +22,7 @@ #include <grub/mm.h> #include <grub/partition.h> #include <grub/dl.h> +#include <grub/charset.h> #include <grub/msdos_partition.h> #include <grub/gpt_partition.h> #include <grub/i18n.h> @@ -49,6 +50,41 @@ static struct grub_partition_map grub_gpt_partition_map; +char * +grub_gpt_partition_get_uuid (grub_device_t dev) +{ + struct grub_gpt_partentry gptdata; + grub_disk_t disk; + grub_partition_t pt; + grub_guid_t *guid; + char *part_uuid = NULL; + + if (dev && dev->disk && dev->disk->partition && dev->disk->partition->partmap) + { + pt = dev->disk->partition; + if (grub_strcmp (pt->partmap->name, "gpt") == 0) + { + disk = grub_disk_open (dev->disk->name); + if (disk && grub_disk_read (disk, pt->offset, pt->index, + sizeof (gptdata), &gptdata) == 0) + { + guid = &gptdata.guid; + guid->data1 = grub_le_to_cpu32 (guid->data1); + guid->data2 = grub_le_to_cpu16 (guid->data2); + guid->data3 = grub_le_to_cpu16 (guid->data3); + part_uuid = grub_xasprintf ("%pG", guid); + } + if (!part_uuid) + grub_error_push (); + grub_disk_close (disk); + if (!part_uuid) + grub_error_pop (); + } + } + + return part_uuid; +} + grub_err_t grub_gpt_partition_map_iterate (grub_disk_t disk, grub_partition_iterate_hook_t hook, diff --git a/include/grub/gpt_partition.h b/include/grub/gpt_partition.h index 020e71920..e52834ac2 100644 --- a/include/grub/gpt_partition.h +++ b/include/grub/gpt_partition.h @@ -74,5 +74,7 @@ grub_gpt_partition_map_iterate (grub_disk_t disk, grub_partition_iterate_hook_t hook, void *hook_data); +char * +grub_gpt_partition_get_uuid (grub_device_t dev); #endif /* ! GRUB_GPT_PARTITION_HEADER */ -- 2.34.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel