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