probe: Support probing for msdos PARTUUID
Extend partition UUID probing support in GRUB core to display pseudo partition UUIDs for MBR (MSDOS) partitions. Signed-off-by: Nicholas Vinson <nvinson234@gmail.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
ff3e91be9c
commit
c7cb11b219
1 changed files with 29 additions and 14 deletions
|
@ -32,6 +32,7 @@
|
|||
#include <grub/env.h>
|
||||
#include <grub/extcmd.h>
|
||||
#include <grub/i18n.h>
|
||||
#include <grub/i386/pc/boot.h>
|
||||
|
||||
GRUB_MOD_LICENSE ("GPLv3+");
|
||||
|
||||
|
@ -104,26 +105,40 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||
{
|
||||
/* AAAABBBB-CCCC-DDDD-EEEE-FFFFFFFFFFFF + null terminator */
|
||||
char val[37] = "none";
|
||||
if (dev->disk && dev->disk->partition &&
|
||||
grub_strcmp(dev->disk->partition->partmap->name, "gpt") == 0)
|
||||
if (dev->disk && dev->disk->partition)
|
||||
{
|
||||
struct grub_gpt_partentry entry;
|
||||
struct grub_partition *p = dev->disk->partition;
|
||||
grub_disk_t disk = grub_disk_open(dev->disk->name);
|
||||
|
||||
if (!disk)
|
||||
return grub_errno;
|
||||
if (grub_disk_read(disk, p->offset, p->index, sizeof(entry), &entry))
|
||||
return grub_errno;
|
||||
if (grub_strcmp(dev->disk->partition->partmap->name, "gpt") == 0)
|
||||
{
|
||||
struct grub_gpt_partentry entry;
|
||||
grub_gpt_part_guid_t *guid;
|
||||
|
||||
if (grub_disk_read(disk, p->offset, p->index, sizeof(entry), &entry))
|
||||
return grub_errno;
|
||||
guid = &entry.guid;
|
||||
grub_snprintf (val, sizeof(val),
|
||||
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
||||
grub_le_to_cpu32 (guid->data1),
|
||||
grub_le_to_cpu16 (guid->data2),
|
||||
grub_le_to_cpu16 (guid->data3),
|
||||
guid->data4[0], guid->data4[1], guid->data4[2],
|
||||
guid->data4[3], guid->data4[4], guid->data4[5],
|
||||
guid->data4[6], guid->data4[7]);
|
||||
}
|
||||
else if (grub_strcmp(dev->disk->partition->partmap->name, "msdos") == 0)
|
||||
{
|
||||
grub_uint32_t nt_disk_sig;
|
||||
|
||||
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);
|
||||
grub_gpt_part_guid_t *guid = &entry.guid;
|
||||
grub_snprintf (val, sizeof(val),
|
||||
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
||||
grub_le_to_cpu32 (guid->data1),
|
||||
grub_le_to_cpu16 (guid->data2),
|
||||
grub_le_to_cpu16 (guid->data3),
|
||||
guid->data4[0], guid->data4[1], guid->data4[2],
|
||||
guid->data4[3], guid->data4[4], guid->data4[5],
|
||||
guid->data4[6], guid->data4[7]);
|
||||
}
|
||||
if (state[0].set)
|
||||
grub_env_set (state[0].arg, val);
|
||||
|
|
Loading…
Reference in a new issue