X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fgrub2%2Fscript.c;h=e29d43702b1e0099435ab76b2f3966ad559cee90;hp=0cf21967450efb3fbdf22c76f901c1c312b4d9d1;hb=59dbd08e2a8354e71578c0d7ca2283951a384801;hpb=1972d9cfcc5300cd8cb2f587d9bc5f856322ae8f diff --git a/discover/grub2/script.c b/discover/grub2/script.c index 0cf2196..e29d437 100644 --- a/discover/grub2/script.c +++ b/discover/grub2/script.c @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -22,8 +23,8 @@ container_of(stmt, struct grub2_statement_conditional, st) struct env_entry { - const char *name; - const char *value; + char *name; + char *value; struct list_item list; }; @@ -34,6 +35,8 @@ struct grub2_symtab_entry { struct list_item list; }; +static const char *default_prefix = "/boot/grub"; + static struct grub2_symtab_entry *script_lookup_function( struct grub2_script *script, const char *name) { @@ -72,11 +75,13 @@ void script_env_set(struct grub2_script *script, if (!entry) { entry = talloc(script, struct env_entry); - entry->name = name; + entry->name = talloc_strdup(entry, name); list_add(&script->environment, &entry->list); + } else { + talloc_free(entry->value); } - entry->value = value; + entry->value = talloc_strdup(entry, value); } static bool expand_var(struct grub2_script *script, struct grub2_word *word) @@ -278,7 +283,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]); + pb_log("grub2: undefined function '%s'\n", st->argv->argv[0]); return 1; } @@ -315,7 +320,7 @@ int statement_if_execute(struct grub2_script *script, struct grub2_statement_if *st = to_stmt_if(statement); struct grub2_statement *conditional; bool executed; - int rc; + int rc = 0; list_for_each_entry(&st->conditionals->list, conditional, list) { rc = statement_conditional_execute(script, @@ -400,7 +405,7 @@ static void init_env(struct grub2_script *script) env = talloc(script, struct env_entry); env->name = talloc_strdup(env, "prefix"); - env->value = talloc_strdup(env, "/"); + env->value = talloc_strdup(env, default_prefix); list_add(&script->environment, &env->list); }