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;
{
.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;
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);
}