summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--discover/grub2/script.c13
-rw-r--r--test/parser/Makefile.am2
-rw-r--r--test/parser/test-grub2-default-id-space.c34
-rw-r--r--test/parser/test-grub2-default-id.c34
4 files changed, 80 insertions, 3 deletions
diff --git a/discover/grub2/script.c b/discover/grub2/script.c
index c910bf8..8a9d91d 100644
--- a/discover/grub2/script.c
+++ b/discover/grub2/script.c
@@ -339,9 +339,16 @@ int statement_menuentry_execute(struct grub2_script *script,
* implementation to get --id= working.
*/
for (i = 1; i < st->argv->argc; ++i) {
- if (strncmp("--id=", st->argv->argv[i], 5) == 0) {
- id = st->argv->argv[i] + 5;
- break;
+ if (strncmp("--id", st->argv->argv[i], strlen("--id")) == 0) {
+ if (strlen(st->argv->argv[i]) > strlen("--id=")) {
+ id = st->argv->argv[i] + strlen("--id=");
+ break;
+ }
+
+ if (i + 1 < st->argv->argc) {
+ id = st->argv->argv[i + 1];
+ break;
+ }
}
}
if (st->argv->argc > 0)
diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am
index f9083bd..748c836 100644
--- a/test/parser/Makefile.am
+++ b/test/parser/Makefile.am
@@ -19,6 +19,8 @@ parser_TESTS = \
test/parser/test-grub2-noeol \
test/parser/test-grub2-menuentry-formats \
test/parser/test-grub2-if-formats \
+ test/parser/test-grub2-default-id \
+ test/parser/test-grub2-default-id-space \
test/parser/test-grub2-default-index \
test/parser/test-grub2-default-multiword \
test/parser/test-grub2-implicit-default-unset \
diff --git a/test/parser/test-grub2-default-id-space.c b/test/parser/test-grub2-default-id-space.c
new file mode 100644
index 0000000..df0eb2a
--- /dev/null
+++ b/test/parser/test-grub2-default-id-space.c
@@ -0,0 +1,34 @@
+
+#include "parser-test.h"
+
+#if 0 /* PARSER_EMBEDDED_CONFIG */
+set default=option1
+menuentry 'test-option-0' --id option0 {
+ linux /vmlinux.0
+}
+menuentry 'test-option-1' --id option1 {
+ linux /vmlinux.1
+}
+menuentry 'test-option-2' --id option2 {
+ linux /vmlinux.2
+}
+#endif
+
+void run_test(struct parser_test *test)
+{
+ struct discover_boot_option *opt;
+ struct discover_context *ctx;
+
+ test_read_conf_embedded(test, "/boot/grub2/grub.cfg");
+ test_run_parser(test, "grub2");
+
+ ctx = test->ctx;
+
+ check_boot_option_count(ctx, 3);
+ opt = get_boot_option(ctx, 1);
+
+ check_name(opt, "test-option-1");
+ check_resolved_local_resource(opt->boot_image, ctx->device,
+ "/vmlinux.1");
+ check_is_default(opt);
+}
diff --git a/test/parser/test-grub2-default-id.c b/test/parser/test-grub2-default-id.c
new file mode 100644
index 0000000..a41a4f9
--- /dev/null
+++ b/test/parser/test-grub2-default-id.c
@@ -0,0 +1,34 @@
+
+#include "parser-test.h"
+
+#if 0 /* PARSER_EMBEDDED_CONFIG */
+set default=option1
+menuentry 'test-option-0' --id=option0 {
+ linux /vmlinux.0
+}
+menuentry 'test-option-1' --id=option1 {
+ linux /vmlinux.1
+}
+menuentry 'test-option-2' --id=option2 {
+ linux /vmlinux.2
+}
+#endif
+
+void run_test(struct parser_test *test)
+{
+ struct discover_boot_option *opt;
+ struct discover_context *ctx;
+
+ test_read_conf_embedded(test, "/boot/grub2/grub.cfg");
+ test_run_parser(test, "grub2");
+
+ ctx = test->ctx;
+
+ check_boot_option_count(ctx, 3);
+ opt = get_boot_option(ctx, 1);
+
+ check_name(opt, "test-option-1");
+ check_resolved_local_resource(opt->boot_image, ctx->device,
+ "/vmlinux.1");
+ check_is_default(opt);
+}
OpenPOWER on IntegriCloud