diff mbox series

[1/2] discover/grub2: Allow using title for default even if id was defined

Message ID 20190620160956.20651-2-javierm@redhat.com
State New
Headers show
Series discover/grub2: A couple of fixes for default entry matching | expand

Commit Message

Javier Martinez Canillas June 20, 2019, 4:09 p.m. UTC
A default menu entry can be chosen using any of the following attributes:
index, title or id (if the entry was defined with the --id option).

But Petitboot doesn't honor this correctly and only compares the default
with the menu entry title if the entry doesn't have an id defined. This
is wrong since an index or title can be used even if an id was defined.

This issue wasn't covered by the test that sets a default using a title
because the menu entries didn't have an id defined. Add an id to them.

Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
---

 discover/grub2/script.c                    | 8 +++-----
 test/parser/test-grub2-default-multiword.c | 4 ++--
 2 files changed, 5 insertions(+), 7 deletions(-)
diff mbox series

Patch

diff --git a/discover/grub2/script.c b/discover/grub2/script.c
index 902df900459..c910bf8bc1a 100644
--- a/discover/grub2/script.c
+++ b/discover/grub2/script.c
@@ -117,12 +117,10 @@  static bool option_is_default(struct grub2_script *script,
 	if (end != var && *end == '\0')
 		return default_idx == script->n_options;
 
-	/* if we don't have an explicit id for this option, fall back to
-	 * the name */
-	if (!id)
-		id = opt->option->name;
+	if (id && !strcmp(id, var))
+		return true;
 
-	return !strcmp(id, var);
+	return !strcmp(opt->option->name, var);
 }
 
 static void append_text_to_current_arg(struct grub2_argv *argv,
diff --git a/test/parser/test-grub2-default-multiword.c b/test/parser/test-grub2-default-multiword.c
index 25d1cf1e5f0..d455d622770 100644
--- a/test/parser/test-grub2-default-multiword.c
+++ b/test/parser/test-grub2-default-multiword.c
@@ -3,10 +3,10 @@ 
 
 #if 0 /* PARSER_EMBEDDED_CONFIG */
 set default="Multiple word option"
-menuentry 'Non-defalt option' {
+menuentry 'Non-defalt option' --id=option0 {
 	linux /vmlinux.non-default
 }
-menuentry 'Multiple word option' {
+menuentry 'Multiple word option' --id=option1 {
 	linux   /vmlinux
 }
 #endif