]> git.ozlabs.org Git - petitboot/blob - discover/grub2/parser-api.c
d3bec3d31029b60689546b68c84884d70d7ab63b
[petitboot] / discover / grub2 / parser-api.c
1
2 #include <talloc/talloc.h>
3
4 #include "grub2.h"
5
6 struct grub2_statements *create_statements(struct grub2_parser *parser)
7 {
8         struct grub2_statements *stmts = talloc(parser,
9                         struct grub2_statements);
10         list_init(&stmts->list);
11         return stmts;
12 }
13
14 struct grub2_statement *create_statement_simple(struct grub2_parser *parser,
15                 struct grub2_argv *argv)
16 {
17         struct grub2_statement_simple *stmt =
18                 talloc(parser, struct grub2_statement_simple);
19         stmt->st.type = STMT_TYPE_SIMPLE;
20         stmt->argv = argv;
21         return &stmt->st;
22 }
23
24 struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
25                 struct grub2_argv *argv, struct grub2_statements *stmts)
26 {
27         struct grub2_statement_menuentry *stmt =
28                 talloc(parser, struct grub2_statement_menuentry);
29         stmt->st.type = STMT_TYPE_MENUENTRY;
30         stmt->argv = argv;
31         stmt->statements = stmts;
32         return &stmt->st;
33 }
34
35 struct grub2_statement *create_statement_if(struct grub2_parser *parser,
36                 struct grub2_statement *condition,
37                 struct grub2_statements *true_case,
38                 struct grub2_statements *false_case)
39 {
40         struct grub2_statement_if *stmt =
41                 talloc(parser, struct grub2_statement_if);
42         stmt->st.type = STMT_TYPE_IF;
43         stmt->condition = condition;
44         stmt->true_case = true_case;
45         stmt->false_case = false_case;
46         return &stmt->st;
47 }
48
49 struct grub2_statement *create_statement_block(struct grub2_parser *parser,
50                 struct grub2_statements *stmts)
51 {
52         struct grub2_statement_block *stmt =
53                 talloc(parser, struct grub2_statement_block);
54         stmt->st.type = STMT_TYPE_BLOCK;
55         stmt->statements = stmts;
56         return &stmt->st;
57 }
58
59 void statement_append(struct grub2_statements *stmts,
60                 struct grub2_statement *stmt)
61 {
62         if (!stmt)
63                 return;
64         list_add_tail(&stmts->list, &stmt->list);
65 }
66
67 struct grub2_word *create_word(struct grub2_parser *parser, const char *text,
68                 bool expand, bool split)
69 {
70         struct grub2_word *word = talloc(parser, struct grub2_word);
71         word->text = talloc_strdup(word, text);
72         word->expand = expand;
73         word->split = split;
74         word->next = NULL;
75         return word;
76 }
77
78 struct grub2_argv *create_argv(struct grub2_parser *parser)
79 {
80         struct grub2_argv *argv = talloc(parser, struct grub2_argv);
81         list_init(&argv->words);
82         return argv;
83 }
84
85 void argv_append(struct grub2_argv *argv, struct grub2_word *word)
86 {
87         list_add_tail(&argv->words, &word->argv_list);
88 }
89
90 void word_append(struct grub2_word *w1, struct grub2_word *w2)
91 {
92         w1->next = w2;
93 }