From 3fb8fb6fb6259e7b0894cb3756ea02dbe2d361f3 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Fri, 10 May 2013 10:16:48 +0800 Subject: [PATCH] discover/yaboot: Fix boot option state We're only picking up every second boot option. Signed-off-by: Jeremy Kerr --- discover/yaboot-parser.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/discover/yaboot-parser.c b/discover/yaboot-parser.c index 6525202..9399cc7 100644 --- a/discover/yaboot-parser.c +++ b/discover/yaboot-parser.c @@ -48,12 +48,7 @@ static void yaboot_finish(struct conf_context *conf) conf_strip_str(opt->boot_args); conf_strip_str(opt->description); - /* opt is persistent, so must be associated with device */ - discover_context_add_boot_option(conf->dc, state->opt); - - state->opt = discover_boot_option_create(conf->dc, conf->dc->device); - state->opt->option->boot_args = talloc_strdup(state->opt->option, ""); } static struct resource *create_yaboot_devpath_resource( @@ -122,13 +117,18 @@ static void yaboot_process_pair(struct conf_context *conf, const char *name, if (streq(name, "image")) { /* First finish any previous image. */ - if (opt->boot_image) + if (opt) yaboot_finish(conf); + opt = discover_boot_option_create(conf->dc, conf->dc->device); + opt->option->boot_args = talloc_strdup(opt->option, ""); + /* Then start the new image. */ opt->boot_image = create_yaboot_devpath_resource(conf, value, &state->desc_image); + state->opt = opt; + return; } @@ -143,12 +143,16 @@ static void yaboot_process_pair(struct conf_context *conf, const char *name, if (suse_fp) { /* First finish any previous image. */ - - if (opt->boot_image) + if (opt) yaboot_finish(conf); /* Then start the new image. */ + opt = discover_boot_option_create(conf->dc, conf->dc->device); + opt->option->boot_args = talloc_strdup(opt->option, ""); + + state->opt = opt; + if (*value == '/') { opt->boot_image = create_yaboot_devpath_resource( conf, value, &state->desc_image); @@ -302,10 +306,7 @@ static int yaboot_parse(struct discover_context *dc, char *buf, int len) state->known_names = yaboot_known_names; - /* opt is persistent, so must be associated with device */ - - state->opt = discover_boot_option_create(conf->dc, conf->dc->device); - state->opt->option->boot_args = talloc_strdup(state->opt->option, ""); + state->opt = NULL; conf_parse_buf(conf, buf, len); -- 2.39.2