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/env.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
|
#include <grub/i386/pc/boot.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
@ -104,18 +105,21 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
/* AAAABBBB-CCCC-DDDD-EEEE-FFFFFFFFFFFF + null terminator */
|
/* AAAABBBB-CCCC-DDDD-EEEE-FFFFFFFFFFFF + null terminator */
|
||||||
char val[37] = "none";
|
char val[37] = "none";
|
||||||
if (dev->disk && dev->disk->partition &&
|
if (dev->disk && dev->disk->partition)
|
||||||
grub_strcmp(dev->disk->partition->partmap->name, "gpt") == 0)
|
|
||||||
{
|
{
|
||||||
struct grub_gpt_partentry entry;
|
|
||||||
struct grub_partition *p = dev->disk->partition;
|
struct grub_partition *p = dev->disk->partition;
|
||||||
grub_disk_t disk = grub_disk_open(dev->disk->name);
|
grub_disk_t disk = grub_disk_open(dev->disk->name);
|
||||||
|
|
||||||
if (!disk)
|
if (!disk)
|
||||||
return grub_errno;
|
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))
|
if (grub_disk_read(disk, p->offset, p->index, sizeof(entry), &entry))
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
grub_disk_close(disk);
|
guid = &entry.guid;
|
||||||
grub_gpt_part_guid_t *guid = &entry.guid;
|
|
||||||
grub_snprintf (val, sizeof(val),
|
grub_snprintf (val, sizeof(val),
|
||||||
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
||||||
grub_le_to_cpu32 (guid->data1),
|
grub_le_to_cpu32 (guid->data1),
|
||||||
|
@ -125,6 +129,17 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
guid->data4[3], guid->data4[4], guid->data4[5],
|
guid->data4[3], guid->data4[4], guid->data4[5],
|
||||||
guid->data4[6], guid->data4[7]);
|
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);
|
||||||
|
}
|
||||||
if (state[0].set)
|
if (state[0].set)
|
||||||
grub_env_set (state[0].arg, val);
|
grub_env_set (state[0].arg, val);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue