File 0003-menu-Add-support-for-LoaderEntryDefault-and-LoaderEn.patch of Package grub2

From 2ad9c121b3bb60bb85506fed30a406d6f0106621 Mon Sep 17 00:00:00 2001
From: Danilo Spinella <danilo.spinella@suse.com>
Date: Wed, 11 Mar 2026 15:06:27 +0100
Subject: [PATCH 3/7] menu: Add support for LoaderEntryDefault and
 LoaderEntryOneShot

---
 grub-core/commands/bli.c | 44 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/grub-core/commands/bli.c b/grub-core/commands/bli.c
index 38f52f87a..0b4e1259a 100644
--- a/grub-core/commands/bli.c
+++ b/grub-core/commands/bli.c
@@ -149,6 +149,49 @@ set_loader_active_pcr_banks (void)
   return status;
 }
 
+/* Get the value of a EFI variable */
+static char*
+get_efivar (const char* efivar)
+{
+  grub_efi_status_t status;
+  grub_size_t size;
+  grub_efi_char16_t *val_efi = NULL;
+  char *val = NULL;
+  status = grub_efi_get_variable (efivar,
+				  &bli_vendor_guid,
+				  &size,
+				  (void**) &val_efi);
+  if (status == GRUB_EFI_SUCCESS && size != 0)
+    {
+      val = grub_malloc (size * sizeof (char));
+      grub_utf16_to_utf8 ((grub_uint8_t*) val,
+			  (grub_uint16_t*) val_efi, size);
+    }
+  return val;
+}
+
+static void
+set_loader_default_entry (void)
+{
+  char* default_entry;
+  char* oneshot_entry = get_efivar("LoaderEntryOneShot");
+
+  if (oneshot_entry != NULL)
+    {
+      grub_env_set ("default", oneshot_entry);
+      grub_efi_set_variable_to_string("LoaderEntryOneShot",
+				      &bli_vendor_guid, "", 0);
+    }
+  else
+    {
+      default_entry = get_efivar("LoaderEntryDefault");
+      if (default_entry != NULL)
+	{
+	  grub_env_set ("default", default_entry);
+	}
+    }
+}
+
 GRUB_MOD_INIT (bli)
 {
   grub_efi_set_variable_to_string ("LoaderInfo", &bli_vendor_guid, PACKAGE_STRING,
@@ -156,6 +199,7 @@ GRUB_MOD_INIT (bli)
 				   GRUB_EFI_VARIABLE_RUNTIME_ACCESS);
   set_loader_device_part_uuid ();
   set_loader_active_pcr_banks ();
+  set_loader_default_entry ();
   /* No error here is critical, other than being logged */
   grub_print_error ();
 }
-- 
2.53.0

openSUSE Build Service is sponsored by