X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fyaboot-parser.c;h=9399cc7f5f0ce796cb3d67f46a25ff9ef2c63446;hp=65252029952acfad51a4416567ed4698db621cc5;hb=3fb8fb6fb6259e7b0894cb3756ea02dbe2d361f3;hpb=0c84df23ef1db1bb29f3e3a6cea75d6dd8df6001 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);