grub-devel
[Top][All Lists]
Advanced

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

[RFC][PATCH] probe: Support probing for gpt partition uuid with -q


From: Jacob Kroon
Subject: [RFC][PATCH] probe: Support probing for gpt partition uuid with -q
Date: Sat, 4 May 2019 18:31:35 +0200

Signed-off-by: Jacob Kroon <address@hidden>
---
 grub-core/commands/probe.c | 13 +++++++++++++
 grub-core/partmap/gpt.c    |  7 +++++++
 include/grub/partition.h   |  3 +++
 3 files changed, 23 insertions(+)

diff --git a/grub-core/commands/probe.c b/grub-core/commands/probe.c
index 95d272287..626ed705c 100644
--- a/grub-core/commands/probe.c
+++ b/grub-core/commands/probe.c
@@ -45,6 +45,7 @@ static const struct grub_arg_option options[] =
     {"fs",             'f', 0, N_("Determine filesystem type."), 0, 0},
     {"fs-uuid",                'u', 0, N_("Determine filesystem UUID."), 0, 0},
     {"label",          'l', 0, N_("Determine filesystem label."), 0, 0},
+    {"partuuid",       'q', 0, N_("Determine partition PARTUUID."), 0, 0},
     {0, 0, 0, 0, 0, 0}
   };
 
@@ -154,6 +155,18 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, char 
**args)
       grub_device_close (dev);
       return GRUB_ERR_NONE;
     }
+  if (state[6].set)
+    {
+      const char *val = "none";
+      if (dev->disk && dev->disk->partition)
+       val = dev->disk->partition->partuuid;
+      if (state[0].set)
+       grub_env_set (state[0].arg, val);
+      else
+       grub_printf ("%s", val);
+      grub_device_close (dev);
+      return GRUB_ERR_NONE;
+    }
   grub_device_close (dev);
   return grub_error (GRUB_ERR_BAD_ARGUMENT, "unrecognised target");
 }
diff --git a/grub-core/partmap/gpt.c b/grub-core/partmap/gpt.c
index 103f6796f..66f4c23fb 100644
--- a/grub-core/partmap/gpt.c
+++ b/grub-core/partmap/gpt.c
@@ -108,6 +108,13 @@ grub_gpt_partition_map_iterate (grub_disk_t disk,
          part.index = last_offset;
          part.partmap = &grub_gpt_partition_map;
          part.parent = disk->partition;
+         grub_gpt_part_guid_t *guid = &entry.guid;
+         grub_snprintf(part.partuuid, sizeof(part.partuuid),
+                       "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+                       guid->data1, guid->data2, 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]);
 
          grub_dprintf ("gpt", "GPT entry %d: start=%lld, length=%lld\n", i,
                        (unsigned long long) part.start,
diff --git a/include/grub/partition.h b/include/grub/partition.h
index 7adb7ec6e..c4dc31d15 100644
--- a/include/grub/partition.h
+++ b/include/grub/partition.h
@@ -78,6 +78,9 @@ struct grub_partition
   /* The index of this partition in the partition table.  */
   int index;
 
+  /* The partition uuid.  */
+  char partuuid[37];
+
   /* Parent partition (physically contains this partition).  */
   struct grub_partition *parent;
 
-- 
2.20.1




reply via email to

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