Simplify 'probe --part-uuid' command to use just added helper functions grub_gpt_partition_get_uuid() and grub_mbr_partition_get_uuid().
Signed-off-by: Vitaly Kuzmichev <vitaly.kuzmic...@rtsoft.de> --- grub-core/commands/probe.c | 59 ++++++++++---------------------------- 1 file changed, 15 insertions(+), 44 deletions(-) diff --git a/grub-core/commands/probe.c b/grub-core/commands/probe.c index be9637f33..05aed2295 100644 --- a/grub-core/commands/probe.c +++ b/grub-core/commands/probe.c @@ -25,6 +25,7 @@ #include <grub/disk.h> #include <grub/partition.h> #include <grub/gpt_partition.h> +#include <grub/msdos_partition.h> #include <grub/net.h> #include <grub/fs.h> #include <grub/file.h> @@ -32,7 +33,6 @@ #include <grub/env.h> #include <grub/extcmd.h> #include <grub/i18n.h> -#include <grub/i386/pc/boot.h> GRUB_MOD_LICENSE ("GPLv3+"); @@ -103,54 +103,25 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, char **args) } if (state[6].set) { - /* AAAABBBB-CCCC-DDDD-EEEE-FFFFFFFFFFFF + null terminator */ - char val[37] = "none"; - if (dev->disk && dev->disk->partition) - { - struct grub_partition *p = dev->disk->partition; - grub_disk_t disk = grub_disk_open(dev->disk->name); - - if (!disk) - { - grub_device_close (dev); - return grub_errno; - } - - if (grub_strcmp(dev->disk->partition->partmap->name, "gpt") == 0) - { - struct grub_gpt_partentry entry; - grub_guid_t *guid; - - if (grub_disk_read(disk, p->offset, p->index, sizeof(entry), &entry)) - { - grub_error_push (); - grub_disk_close (disk); - grub_device_close (dev); - grub_error_pop (); - return grub_errno; - } - guid = &entry.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); - grub_snprintf (val, sizeof(val), "%pG", guid); - } - else if (grub_strcmp(dev->disk->partition->partmap->name, "msdos") == 0) - { - grub_uint32_t nt_disk_sig; + char *part_uuid; - if (grub_disk_read(disk, 0, GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC, - sizeof(nt_disk_sig), &nt_disk_sig) == 0) - grub_snprintf (val, sizeof(val), "%08x-%02x", - grub_le_to_cpu32(nt_disk_sig), 1 + p->number); - } - grub_disk_close(disk); + part_uuid = grub_gpt_partition_get_uuid (dev); + if (!part_uuid && !grub_errno) + part_uuid = grub_mbr_partition_get_uuid (dev); + if (!part_uuid && grub_errno) + { + grub_error_push (); + grub_device_close (dev); + grub_error_pop (); + return grub_errno; } + if (state[0].set) - grub_env_set (state[0].arg, val); + grub_env_set (state[0].arg, part_uuid ? part_uuid : "none"); else - grub_printf ("%s", val); + grub_printf ("%s", part_uuid ? part_uuid : "none"); grub_device_close (dev); + grub_free (part_uuid); return GRUB_ERR_NONE; } fs = grub_fs_probe (dev); -- 2.34.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel