X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fgrub2%2Fbuiltins.c;h=4261eebdbdea73563b4c6d50d01a975e8fea11e3;hp=cd56dcc033f8eb67d414e68d241fd5e53b315edb;hb=27037bcd151ff8ecad1aaca7eaa06fb5c3f9fd1f;hpb=1513dd5d05f6408a64e19ea18cfaeb0cb8c5fb73 diff --git a/discover/grub2/builtins.c b/discover/grub2/builtins.c index cd56dcc..4261eeb 100644 --- a/discover/grub2/builtins.c +++ b/discover/grub2/builtins.c @@ -97,6 +97,40 @@ 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 int builtin_nop(struct grub2_script *script __attribute__((unused)), + void *data __attribute__((unused)), + int argc __attribute__((unused)), + char *argv[] __attribute__((unused))) +{ + return 0; +} + static struct { const char *name; grub2_function fn; @@ -112,9 +146,17 @@ static struct { { .name = "initrd", .fn = builtin_initrd, + }, + { + .name = "search", + .fn = builtin_search, } }; +static const char *nops[] = { + "echo", "export", "insmod", "loadfont", "terminfo", +}; + void register_builtins(struct grub2_script *script) { unsigned int i; @@ -122,4 +164,7 @@ void register_builtins(struct grub2_script *script) for (i = 0; i < ARRAY_SIZE(builtins); i++) script_register_function(script, builtins[i].name, builtins[i].fn, NULL); + + for (i = 0; i < ARRAY_SIZE(nops); i++) + script_register_function(script, nops[i], builtin_nop, NULL); }