grub-devel
[Top][All Lists]
Advanced

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

[PATCH v5 03/16] commands/probe: Simplify 'probe --part-uuid' command


From: Vitaly Kuzmichev
Subject: [PATCH v5 03/16] commands/probe: Simplify 'probe --part-uuid' command
Date: Tue, 22 Aug 2023 23:39:11 +0200

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.kuzmichev@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




reply via email to

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