X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=discover%2Fgrub2%2Fscript.c;h=aeb59783e1b48c38d8b7aa9ed5fdf0f90c9bd7c8;hb=44e10d816427c001d60eb5e7b3e75b740e5a2823;hp=a58f1a0f58eccb51abee06f9127ca0ac30450091;hpb=729bcafedd3b117c031c413fac2e2d2096d62510;p=petitboot diff --git a/discover/grub2/script.c b/discover/grub2/script.c index a58f1a0..aeb5978 100644 --- a/discover/grub2/script.c +++ b/discover/grub2/script.c @@ -103,7 +103,7 @@ static bool is_delim(char c) } static bool option_is_default(struct grub2_script *script, - struct discover_boot_option *opt) + struct discover_boot_option *opt, const char *id) { unsigned int default_idx; const char *var; @@ -117,7 +117,12 @@ static bool option_is_default(struct grub2_script *script, if (end != var && *end == '\0') return default_idx == script->n_options; - return !strcmp(opt->option->name, var); + /* if we don't have an explicit id for this option, fall back to + * the name */ + if (!id) + id = opt->option->name; + + return !strcmp(id, var); } /* For non-double-quoted variable expansions, we may need to split the @@ -340,24 +345,36 @@ int statement_menuentry_execute(struct grub2_script *script, { struct grub2_statement_menuentry *st = to_stmt_menuentry(statement); struct discover_boot_option *opt; + const char *id = NULL; + int i; process_expansions(script, st->argv); opt = discover_boot_option_create(script->ctx, script->ctx->device); - if (st->argv->argc > 0) { + + /* XXX: --options=values need to be parsed properly; this is a simple + * implementation to get --id= working. + */ + for (i = 1; i < st->argv->argc; ++i) { + if (strncmp("--id=", st->argv->argv[i], 5) == 0) { + id = st->argv->argv[i] + 5; + break; + } + } + if (st->argv->argc > 0) opt->option->name = talloc_strdup(opt, st->argv->argv[0]); - } else { + else opt->option->name = talloc_strdup(opt, "(unknown)"); - } + opt->option->id = talloc_asprintf(opt->option, "%s#%s", script->ctx->device->device->id, - opt->option->name); + id ? id : opt->option->name); script->opt = opt; statements_execute(script, st->statements); - opt->option->is_default = option_is_default(script, opt); + opt->option->is_default = option_is_default(script, opt, id); discover_context_add_boot_option(script->ctx, opt); script->n_options++;