X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fgrub2%2Fscript.c;h=43259aafa304fb973ed0989a10a4ac36dd8b3b00;hp=239ae38f5e67306408e7c386abc050b03ec5d4d6;hb=9cf9430d5a1db0addd4788798fd7275d2c514f3c;hpb=d39ae394911f945cd4a7789a8b210a5662852c46 diff --git a/discover/grub2/script.c b/discover/grub2/script.c index 239ae38..43259aa 100644 --- a/discover/grub2/script.c +++ b/discover/grub2/script.c @@ -9,6 +9,8 @@ #define to_stmt_simple(stmt) \ container_of(stmt, struct grub2_statement_simple, st) +#define to_stmt_block(stmt) \ + container_of(stmt, struct grub2_statement_block, st) #define to_stmt_if(stmt) \ container_of(stmt, struct grub2_statement_if, st) #define to_stmt_menuentry(stmt) \ @@ -246,7 +248,7 @@ int statement_simple_execute(struct grub2_script *script, entry = script_lookup_function(script, st->argv->argv[0]); if (!entry) { fprintf(stderr, "undefined function '%s'\n", st->argv->argv[0]); - return 0; + return 1; } rc = entry->fn(script, entry->data, st->argv->argc, st->argv->argv); @@ -254,6 +256,13 @@ int statement_simple_execute(struct grub2_script *script, return rc; } +int statement_block_execute(struct grub2_script *script, + struct grub2_statement *statement) +{ + struct grub2_statement_block *st = to_stmt_block(statement); + return statements_execute(script, st->statements); +} + /* returns 0 if the statement was executed, 1 otherwise */ static int statement_conditional_execute(struct grub2_script *script, struct grub2_statement *statement, bool *executed) @@ -304,6 +313,9 @@ int statement_menuentry_execute(struct grub2_script *script, } 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); script->opt = opt;