summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2014-01-14 10:56:41 +0800
committerJeremy Kerr <jk@ozlabs.org>2014-01-14 11:02:32 +0800
commit5ee01bf795817cbfa9fb378b11ebd212d66e51c1 (patch)
tree2c4b2279eaef9b82606f3017e962a7d89aa56bcd
parentfb03a29fab5130041ed8f607f811dadeb797e5c9 (diff)
downloadtalos-petitboot-5ee01bf795817cbfa9fb378b11ebd212d66e51c1.zip
talos-petitboot-5ee01bf795817cbfa9fb378b11ebd212d66e51c1.tar.gz
discover/yaboot: Clear globals_done when we see an image definition
Currently, we have a bug where a 'known_name' that appears before an image section will cause globals_done to be set, and we don't see any further global variables. This change sets globals_done only once we see an image section. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r--discover/yaboot-parser.c5
-rw-r--r--test/parser/Makefile.am1
-rw-r--r--test/parser/test-yaboot-global-state.c30
3 files changed, 33 insertions, 3 deletions
diff --git a/discover/yaboot-parser.c b/discover/yaboot-parser.c
index 41f43eb..eaefbf0 100644
--- a/discover/yaboot-parser.c
+++ b/discover/yaboot-parser.c
@@ -197,11 +197,10 @@ static void yaboot_process_pair(struct conf_context *conf, const char *name,
if (!conf_param_in_list(state->known_names, name))
return;
- state->globals_done = 1;
-
/* image */
-
if (streq(name, "image")) {
+ /* an image section finishes our global defintions */
+ state->globals_done = 1;
/* First finish any previous image. */
if (opt)
diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am
index abc95bb..8af4190 100644
--- a/test/parser/Makefile.am
+++ b/test/parser/Makefile.am
@@ -50,6 +50,7 @@ TESTS = \
test-yaboot-root-global \
test-yaboot-root-override \
test-yaboot-device-override \
+ test-yaboot-global-state \
test-yaboot-default \
test-yaboot-rh8-ppc64 \
test-pxe-empty \
diff --git a/test/parser/test-yaboot-global-state.c b/test/parser/test-yaboot-global-state.c
new file mode 100644
index 0000000..d0c71bb
--- /dev/null
+++ b/test/parser/test-yaboot-global-state.c
@@ -0,0 +1,30 @@
+#include "parser-test.h"
+
+#if 0 /* PARSER_EMBEDDED_CONFIG */
+append="console=ttyS0"
+default=one
+
+image=/boot/vmlinux-1
+ label=one
+
+image=/boot/vmlinux-2
+ label=two
+#endif
+
+void run_test(struct parser_test *test)
+{
+ struct discover_boot_option *opt;
+ struct discover_context *ctx;
+
+ test_read_conf_embedded(test, "/etc/yaboot.conf");
+
+ test_run_parser(test, "yaboot");
+
+ ctx = test->ctx;
+
+ check_boot_option_count(ctx, 2);
+
+ opt = get_boot_option(ctx, 0);
+ check_name(opt, "one");
+ check_is_default(opt);
+}
OpenPOWER on IntegriCloud