6 #include <types/types.h>
7 #include <talloc/talloc.h>
8 #include <array-size/array-size.h>
10 #include <discover/parser.h>
11 #include <discover/file.h>
15 static const char *default_envfile = "grubenv";
16 static const char *signature = "# GRUB Environment Block\n";
18 static int parse_buf_to_env(struct grub2_script *script, void *buf, int len)
20 char *tmp, *line, *sep;
23 siglen = strlen(signature);
26 pb_log("grub environment block too small\n");
30 if (memcmp(buf, signature, siglen)) {
31 pb_log("grub environment block has invalid signature\n");
37 for (line = strtok_r(buf, "\n", &tmp); line;
38 line = strtok_r(NULL, "\n", &tmp)) {
43 sep = strchr(line, '=');
50 script_env_set(script, line, sep + 1);
56 int builtin_load_env(struct grub2_script *script,
57 void *data __attribute__((unused)),
58 int argc, char *argv[]);
60 int builtin_load_env(struct grub2_script *script,
61 void *data __attribute__((unused)),
62 int argc, char *argv[])
64 struct discover_device *dev = script->ctx->device;
69 /* we only support local filesystems */
71 pb_log("load_env: can't load from a non-mounted device (%s)\n",
76 if (argc == 3 && !strcmp(argv[1], "-f"))
79 envfile = default_envfile;
81 envpath = talloc_asprintf(script, "%s/%s",
82 script_env_get(script, "prefix") ? : "",
85 rc = parser_request_file(script->ctx, dev, envpath, &buf, &len);
88 rc = parse_buf_to_env(script, buf, len);
95 int builtin_save_env(struct grub2_script *script,
96 void *data __attribute__((unused)),
97 int argc, char *argv[]);
99 int builtin_save_env(struct grub2_script *script __attribute__((unused)),
100 void *data __attribute__((unused)),
101 int argc __attribute__((unused)),
102 char *argv[] __attribute__((unused)))