aboutsummaryrefslogtreecommitdiffstats
path: root/com32/elflink
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@linux.intel.com>2011-03-08 19:25:37 +0000
committerMatt Fleming <matt.fleming@linux.intel.com>2011-03-09 14:32:36 +0000
commit5c907b4f4fbbe9ee565aa4fdfec6ae9be6d28580 (patch)
tree37c42fe279e900bb3ec17a5ad4792a160baffcc7 /com32/elflink
parent5fd19f467ae4e8f5dc7298b56c63f5d9d7569b9d (diff)
downloadsyslinux-5c907b4f4fbbe9ee565aa4fdfec6ae9be6d28580.tar.gz
syslinux-5c907b4f4fbbe9ee565aa4fdfec6ae9be6d28580.tar.xz
syslinux-5c907b4f4fbbe9ee565aa4fdfec6ae9be6d28580.zip
ldlinux: Parse configuration files
Use the configuration file parser provided by ldlinux to search for and parse any configuration files. If a kernel or ui module is found in the configuration file, it is executed once parsing completes. Parsing and loading kernels is now entirely done in C! The parser also builds the data structures for later use by the menu system. Previously, after the asm config parser had parsed the config file and found a kernel image to boot (or dropped the user at a command prompt), the menu.c32 module had to open the config file and re-parse it. Now, we only need to parse the file once. Signed-off-by: Matt Fleming <matt.fleming@linux.intel.com>
Diffstat (limited to 'com32/elflink')
-rw-r--r--com32/elflink/ldlinux/ldlinux.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/com32/elflink/ldlinux/ldlinux.c b/com32/elflink/ldlinux/ldlinux.c
index b3484901..b94010e3 100644
--- a/com32/elflink/ldlinux/ldlinux.c
+++ b/com32/elflink/ldlinux/ldlinux.c
@@ -26,10 +26,45 @@ static void enter_cmdline(void)
}
}
+static void load_kernel(void)
+{
+ enum kernel_type type;
+
+ if (defaultlevel == LEVEL_UI)
+ type = KT_COM32;
+ else
+ type = KT_KERNEL;
+
+ execute(default_cmd, type);
+}
+
static int ldlinux_main(int argc, char **argv)
{
openconsole(&dev_rawcon_r, &dev_ansiserial_w);
+ parse_configs(NULL);
+
+ /* TODO: ADV */
+ /* TODO: Check KbdFlags? */
+
+ if (forceprompt)
+ goto cmdline;
+
+ /*
+ * Auto boot
+ */
+ if (defaultlevel || !noescape) {
+ if (defaultlevel) {
+ load_kernel(); /* Shouldn't return */
+ } else {
+ printf("No DEFAULT or UI configuration directive found!\n");
+
+ if (noescape)
+ kaboom();
+ }
+ }
+
+cmdline:
/* Should never return */
enter_cmdline();