diff options
author | Matt Fleming <matt.fleming@linux.intel.com> | 2011-03-09 14:20:19 +0000 |
---|---|---|
committer | Matt Fleming <matt.fleming@linux.intel.com> | 2011-03-09 14:32:36 +0000 |
commit | 9ded45991b4fc83b40af963feb773ddca2589d74 (patch) | |
tree | d538d93d7b9040a0582c7382bf45dbf84e415fcd | |
parent | 5c907b4f4fbbe9ee565aa4fdfec6ae9be6d28580 (diff) | |
download | syslinux-9ded45991b4fc83b40af963feb773ddca2589d74.tar.gz syslinux-9ded45991b4fc83b40af963feb773ddca2589d74.tar.xz syslinux-9ded45991b4fc83b40af963feb773ddca2589d74.zip |
ldlinux: Parse and store the "onerror" command line
If we fail to load a kernel and the parser found an "onerror"
directive, execute the onerror command line.
Signed-off-by: Matt Fleming <matt.fleming@linux.intel.com>
-rw-r--r-- | com32/elflink/ldlinux/config.h | 1 | ||||
-rw-r--r-- | com32/elflink/ldlinux/ldlinux.c | 10 | ||||
-rw-r--r-- | com32/elflink/ldlinux/readconfig.c | 9 |
3 files changed, 20 insertions, 0 deletions
diff --git a/com32/elflink/ldlinux/config.h b/com32/elflink/ldlinux/config.h index 17c7b28e..77652663 100644 --- a/com32/elflink/ldlinux/config.h +++ b/com32/elflink/ldlinux/config.h @@ -34,5 +34,6 @@ extern short displaycon; //conio.inc extern short nohalt; //idle.inc extern char *default_cmd; //"default" command line +extern char *onerror; //"onerror" command line #endif /* __CONFIG_H__ */ diff --git a/com32/elflink/ldlinux/ldlinux.c b/com32/elflink/ldlinux/ldlinux.c index b94010e3..b5a44093 100644 --- a/com32/elflink/ldlinux/ldlinux.c +++ b/com32/elflink/ldlinux/ldlinux.c @@ -29,6 +29,7 @@ static void enter_cmdline(void) static void load_kernel(void) { enum kernel_type type; + const char *cmdline; if (defaultlevel == LEVEL_UI) type = KT_COM32; @@ -36,6 +37,15 @@ static void load_kernel(void) type = KT_KERNEL; execute(default_cmd, type); + + /* + * If we fail to boot the kernel execute the "onerror" command + * line. + */ + if (onerrorlen) { + rsprintf(&cmdline, "%s %s", onerror, default_cmd); + execute(cmdline, KT_COM32); + } } static int ldlinux_main(int argc, char **argv) diff --git a/com32/elflink/ldlinux/readconfig.c b/com32/elflink/ldlinux/readconfig.c index ed498ff4..898ee19a 100644 --- a/com32/elflink/ldlinux/readconfig.c +++ b/com32/elflink/ldlinux/readconfig.c @@ -60,6 +60,7 @@ short displaycon = 1; //conio.inc short nohalt = 1; //idle.inc char *default_cmd = NULL; //"default" command line +char *onerror = NULL; //"onerror" command line /* Empty refstring */ const char *empty_string; @@ -703,6 +704,8 @@ static void parse_config_file(FILE * f) refstr_put(m->onerror); m->onerror = refstrdup(skipspace(p + 7)); onerrorlen = strlen(m->onerror); + refstr_put(onerror); + onerror = refstrdup(m->onerror); } else if (looking_at(p, "master")) { p = skipspace(p + 6); if (looking_at(p, "passwd")) { @@ -1030,6 +1033,12 @@ do_include: nocomplete = atoi(skipspace(p + 10)); } else if (looking_at(p, "nohalt")) { nohalt = atoi(skipspace(p + 8)); + } else if (looking_at(p, "onerror")) { + refstr_put(m->onerror); + m->onerror = refstrdup(skipspace(p + 7)); + onerrorlen = strlen(m->onerror); + refstr_put(onerror); + onerror = refstrdup(m->onerror); } /* serial setting, bps, flow control */ |