diff options
Diffstat (limited to 'boot')
-rw-r--r-- | boot/boot.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/boot/boot.c b/boot/boot.c index 185952ae..2d2e699b 100644 --- a/boot/boot.c +++ b/boot/boot.c @@ -536,6 +536,33 @@ main (int argc, char **argv, char **envp) host_exit (1); } + /* Turn each `FOO=BAR' word in the command line into a boot script + variable ${FOO} with value BAR. */ + { + int len = strlen (kernel_command_line) + 1; + char *s = memcpy (alloca (len), kernel_command_line, len); + char *word; + + while ((word = strsep (&s, " \t")) != 0) + { + char *eq = strchr (word, '='); + if (eq == 0) + continue; + *eq++ = '\0'; + err = boot_script_set_variable (word, VAL_STR, (int) eq); + if (err) + { + char *msg; + asprintf (&msg, "cannot set boot-script variable %s: %s\n", + word, boot_script_error_string (err)); + assert (msg); + write (2, msg, strlen (msg)); + free (msg); + host_exit (1); + } + } + } + /* Parse the boot script. */ { char *p, *line; |