diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-09-16 16:53:22 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-09-24 13:14:59 +0800 |
commit | 4bf4d14afbc46d6bbf11839b1f8fdc9bf66dd16d (patch) | |
tree | 229ba19ba930fe795f0cf2a5bac290bc9ba90691 /discover/grub2 | |
parent | 1513dd5d05f6408a64e19ea18cfaeb0cb8c5fb73 (diff) | |
download | talos-petitboot-4bf4d14afbc46d6bbf11839b1f8fdc9bf66dd16d.tar.gz talos-petitboot-4bf4d14afbc46d6bbf11839b1f8fdc9bf66dd16d.zip |
discover/grub2: Implement 'search' command
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/grub2')
-rw-r--r-- | discover/grub2/builtins.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/discover/grub2/builtins.c b/discover/grub2/builtins.c index cd56dcc..8171b8d 100644 --- a/discover/grub2/builtins.c +++ b/discover/grub2/builtins.c @@ -97,6 +97,32 @@ static int builtin_initrd(struct grub2_script *script, return 0; } +static int builtin_search(struct grub2_script *script, + void *data __attribute__((unused)), + int argc, char *argv[]) +{ + const char *env_var, *spec; + int i; + + env_var = NULL; + + for (i = 1; i < argc - 1; i++) { + if (!strncmp(argv[i], "--set=", strlen("--set="))) { + env_var = argv[i] + strlen("--set="); + break; + } + } + + if (!env_var) + return 0; + + spec = argv[argc - 1]; + + script_env_set(script, env_var, spec); + + return 0; +} + static struct { const char *name; grub2_function fn; @@ -112,6 +138,10 @@ static struct { { .name = "initrd", .fn = builtin_initrd, + }, + { + .name = "search", + .fn = builtin_search, } }; |