From: Jeremy Kerr Date: Fri, 10 May 2013 02:16:48 +0000 (+0800) Subject: discover/yaboot: Fix boot option state X-Git-Tag: v1.0.0~638 X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=3fb8fb6fb;hp=0c84df23ef1db1bb29f3e3a6cea75d6dd8df6001 discover/yaboot: Fix boot option state We're only picking up every second boot option. Signed-off-by: Jeremy Kerr --- 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);