X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=discover%2Fgrub2%2Fparser-api.c;h=f8915a1f52b3065b725f215918a1c5d4da669d17;hb=c12f6bacbd96fda27252bdb79781e5743c01da60;hp=d3bec3d31029b60689546b68c84884d70d7ab63b;hpb=c0b2be44ee953f9f50737b959e0def6e2df24629;p=petitboot diff --git a/discover/grub2/parser-api.c b/discover/grub2/parser-api.c index d3bec3d..f8915a1 100644 --- a/discover/grub2/parser-api.c +++ b/discover/grub2/parser-api.c @@ -17,6 +17,7 @@ struct grub2_statement *create_statement_simple(struct grub2_parser *parser, struct grub2_statement_simple *stmt = talloc(parser, struct grub2_statement_simple); stmt->st.type = STMT_TYPE_SIMPLE; + stmt->st.exec = statement_simple_execute; stmt->argv = argv; return &stmt->st; } @@ -27,6 +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->argv = argv; stmt->statements = stmts; return &stmt->st; @@ -40,6 +42,7 @@ struct grub2_statement *create_statement_if(struct grub2_parser *parser, struct grub2_statement_if *stmt = talloc(parser, struct grub2_statement_if); stmt->st.type = STMT_TYPE_IF; + stmt->st.exec = statement_if_execute; stmt->condition = condition; stmt->true_case = true_case; stmt->false_case = false_case; @@ -52,6 +55,7 @@ struct grub2_statement *create_statement_block(struct grub2_parser *parser, struct grub2_statement_block *stmt = talloc(parser, struct grub2_statement_block); stmt->st.type = STMT_TYPE_BLOCK; + stmt->st.exec = NULL; stmt->statements = stmts; return &stmt->st; } @@ -64,14 +68,26 @@ void statement_append(struct grub2_statements *stmts, list_add_tail(&stmts->list, &stmt->list); } -struct grub2_word *create_word(struct grub2_parser *parser, const char *text, - bool expand, bool split) +struct grub2_word *create_word_text(struct grub2_parser *parser, + const char *text) { struct grub2_word *word = talloc(parser, struct grub2_word); + word->type = GRUB2_WORD_TEXT; word->text = talloc_strdup(word, text); - word->expand = expand; - word->split = split; word->next = NULL; + word->last = word; + return word; +} + +struct grub2_word *create_word_var(struct grub2_parser *parser, + const char *name, bool split) +{ + 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->next = NULL; + word->last = word; return word; } @@ -89,5 +105,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; }