summaryrefslogtreecommitdiffstats
path: root/discover/yaboot-parser.c
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-05-10 10:16:48 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-05-15 14:36:53 +0800
commit3fb8fb6fb6259e7b0894cb3756ea02dbe2d361f3 (patch)
treea9d6e6904aa3a684a12ac11d51f1aae5a9e504fc /discover/yaboot-parser.c
parent0c84df23ef1db1bb29f3e3a6cea75d6dd8df6001 (diff)
downloadtalos-petitboot-3fb8fb6fb6259e7b0894cb3756ea02dbe2d361f3.tar.gz
talos-petitboot-3fb8fb6fb6259e7b0894cb3756ea02dbe2d361f3.zip
discover/yaboot: Fix boot option state
We're only picking up every second boot option. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/yaboot-parser.c')
-rw-r--r--discover/yaboot-parser.c25
1 files 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);
OpenPOWER on IntegriCloud