Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
discover/grub2: Allow (device)/path references in general script usage
Currently, we have support for grub2 (device)/path syntax for boot resources. This change allows this syntax for general paths in grub2 scripts (for example, -f tests). This involves exposing grub2_lookup_device, to allow the script execution code to resolve pathnames. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
- Loading branch information
Showing
5 changed files
with
104 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
/* check grub2 device+path string parsing, as used in scripts */ | ||
|
||
#include "parser-test.h" | ||
|
||
#if 0 /* PARSER_EMBEDDED_CONFIG */ | ||
|
||
v= | ||
|
||
# local device, file present | ||
if [ -f "/1-present" ]; then v=${v}a; fi | ||
|
||
# local device, file absent | ||
if [ -f "/1-absent" ]; then v=${v}b; fi; | ||
|
||
# local device by UUID, file present | ||
if [ -f "(00000000-0000-0000-0000-000000000001)/1-present" ]; then v=${v}c; fi; | ||
|
||
# remote device by UUID, file present | ||
if [ -f "(00000000-0000-0000-0000-000000000002)/2-present" ]; then v=${v}d; fi; | ||
|
||
# non-existent device | ||
if [ -f "(00000000-0000-0000-0000-000000000003)/present" ]; then v=${v}e; fi; | ||
|
||
menuentry $v { | ||
linux /vmlinux | ||
} | ||
|
||
#endif | ||
|
||
void run_test(struct parser_test *test) | ||
{ | ||
struct discover_device *dev1, *dev2; | ||
struct discover_boot_option *opt; | ||
struct discover_context *ctx; | ||
|
||
ctx = test->ctx; | ||
|
||
/* set local uuid */ | ||
dev1 = test->ctx->device; | ||
dev1->uuid = "00000000-0000-0000-0000-000000000001"; | ||
|
||
dev2 = test_create_device(test, "extdev"); | ||
dev2->uuid = "00000000-0000-0000-0000-000000000002"; | ||
device_handler_add_device(ctx->handler, dev2); | ||
|
||
test_add_file_data(test, dev1, "/1-present", "x", 1); | ||
test_add_file_data(test, dev2, "/2-present", "x", 1); | ||
|
||
test_read_conf_embedded(test, "/grub/grub.cfg"); | ||
|
||
test_run_parser(test, "grub2"); | ||
|
||
check_boot_option_count(ctx, 1); | ||
opt = get_boot_option(ctx, 0); | ||
check_name(opt, "acd"); | ||
} |