]> git.ozlabs.org Git - petitboot/blobdiff - discover/grub2/parser-api.c
discover/grub2: Implement multiple-arv variable splitting
[petitboot] / discover / grub2 / parser-api.c
index 765bd873e2fa4d333062fb5ce9484647593c2db2..aa5997851a7ad42947e6810e2deb41b7f1d1bba1 100644 (file)
@@ -28,7 +28,7 @@ struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
        struct grub2_statement_menuentry *stmt =
                talloc(parser, struct grub2_statement_menuentry);
        stmt->st.type = STMT_TYPE_MENUENTRY;
-       stmt->st.exec = NULL;
+       stmt->st.exec = statement_menuentry_execute;
        stmt->argv = argv;
        stmt->statements = stmts;
        return &stmt->st;
@@ -73,8 +73,10 @@ struct grub2_word *create_word_text(struct grub2_parser *parser,
 {
        struct grub2_word *word = talloc(parser, struct grub2_word);
        word->type = GRUB2_WORD_TEXT;
+       word->split = false;
        word->text = talloc_strdup(word, text);
        word->next = NULL;
+       word->last = word;
        return word;
 }
 
@@ -83,9 +85,10 @@ struct grub2_word *create_word_var(struct grub2_parser *parser,
 {
        struct grub2_word *word = talloc(parser, struct grub2_word);
        word->type = GRUB2_WORD_VAR;
-       word->var.name = talloc_strdup(word, name);
-       word->var.split = split;
+       word->name = talloc_strdup(word, name);
+       word->split = split;
        word->next = NULL;
+       word->last = word;
        return word;
 }
 
@@ -103,5 +106,6 @@ void argv_append(struct grub2_argv *argv, struct grub2_word *word)
 
 void word_append(struct grub2_word *w1, struct grub2_word *w2)
 {
-       w1->next = w2;
+       w1->last->next = w2;
+       w1->last = w2;
 }