discover/grub2: Add initial command execution
[petitboot] / discover / grub2 / builtins.c
1
2 #include <stdio.h>
3 #include <string.h>
4
5 #include <talloc/talloc.h>
6 #include <array-size/array-size.h>
7
8 #include "grub2.h"
9
10
11 static int builtin_set(struct grub2_script *script, int argc, char *argv[])
12 {
13         char *name, *value, *p;
14         int i;
15
16         if (argc < 2)
17                 return -1;
18
19         p = strchr(argv[1], '=');
20         if (!p)
21                 return -1;
22
23         name = talloc_strndup(script, argv[1], p - argv[1]);
24         value = talloc_strdup(script, p+1);
25
26         for (i = 2; i < argc; i++)
27                 value = talloc_asprintf_append(value, " %s", argv[i]);
28
29         script_env_set(script, name, value);
30
31         return 0;
32 }
33
34 static struct grub2_command commands[] = {
35         {
36                 .name = "set",
37                 .exec = builtin_set
38         },
39 };
40
41 void register_builtins(struct grub2_script *script)
42 {
43         unsigned int i;
44
45         for (i = 0; i < ARRAY_SIZE(commands); i++)
46                 script_register_command(script, &commands[i]);
47 }