grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] probe: Support probing for msdos PARTUUID


From: Nicholas Vinson
Subject: [PATCH] probe: Support probing for msdos PARTUUID
Date: Mon, 30 Sep 2019 08:27:59 -0400

Extend partition UUID probing support in GRUB core to display pseudo partition
UUIDs for MBR (MSDOS) partitions.

Signed-off-by: Nicholas Vinson <address@hidden>
---
 grub-core/commands/probe.c | 43 +++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 14 deletions(-)

diff --git a/grub-core/commands/probe.c b/grub-core/commands/probe.c
index d2e7f662e..6d79810b4 100644
--- a/grub-core/commands/probe.c
+++ b/grub-core/commands/probe.c
@@ -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;
+
+             if (grub_disk_read(disk,
+                                p->offset, p->index, sizeof(entry), &entry))
+               return grub_errno;
+             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]);
+           }
+         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);
-- 
2.23.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]