discover/yaboot: Clear globals_done when we see an image definition
authorJeremy Kerr <jk@ozlabs.org>
Tue, 14 Jan 2014 02:56:41 +0000 (10:56 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Tue, 14 Jan 2014 03:02:32 +0000 (11:02 +0800)
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>
discover/yaboot-parser.c
test/parser/Makefile.am
test/parser/test-yaboot-global-state.c [new file with mode: 0644]

index 41f43eb614186926ad38dd8bebe1f3b2f6f958d8..eaefbf0041572cfbcd7dd3fdf3a376d7bd657718 100644 (file)
@@ -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;
 
        if (!conf_param_in_list(state->known_names, name))
                return;
 
-       state->globals_done = 1;
-
        /* image */
        /* image */
-
        if (streq(name, "image")) {
        if (streq(name, "image")) {
+               /* an image section finishes our global defintions */
+               state->globals_done = 1;
 
                /* First finish any previous image. */
                if (opt)
 
                /* First finish any previous image. */
                if (opt)
index abc95bbd98e6d2c4d39f00289f89c53572560564..8af41905a1007185f4a84d8be69a0691aab00e5f 100644 (file)
@@ -50,6 +50,7 @@ TESTS = \
        test-yaboot-root-global \
        test-yaboot-root-override \
        test-yaboot-device-override \
        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 \
        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 (file)
index 0000000..d0c71bb
--- /dev/null
@@ -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);
+}