From 5ee01bf795817cbfa9fb378b11ebd212d66e51c1 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Tue, 14 Jan 2014 10:56:41 +0800 Subject: [PATCH] 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 --- discover/yaboot-parser.c | 5 ++--- test/parser/Makefile.am | 1 + test/parser/test-yaboot-global-state.c | 30 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 test/parser/test-yaboot-global-state.c 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); +} -- 2.39.2