#include <grub/env.h>
#include <grub/extcmd.h>
#include <grub/i18n.h>
+#include <grub/i386/pc/boot.h>
GRUB_MOD_LICENSE ("GPLv3+");
{
/* 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);