]> git.ozlabs.org Git - petitboot/blob - discover/grub2/parser-api.c
discover/grub2: Add structures & API for parser
[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 *stmt = talloc(parser, struct grub2_statement);
18         stmt->type = STMT_TYPE_SIMPLE;
19         stmt->simple.argv = argv;
20         return stmt;
21 }
22
23 struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
24                 struct grub2_argv *argv, struct grub2_statements *stmts)
25 {
26         struct grub2_statement *stmt = talloc(parser, struct grub2_statement);
27         stmt->type = STMT_TYPE_MENUENTRY;
28         stmt->menuentry.argv = argv;
29         stmt->menuentry.statements = stmts;
30         return stmt;
31 }
32
33 struct grub2_statement *create_statement_if(struct grub2_parser *parser,
34                 struct grub2_statement *condition,
35                 struct grub2_statements *true_case,
36                 struct grub2_statements *false_case)
37 {
38         struct grub2_statement *stmt = talloc(parser, struct grub2_statement);
39         stmt->type = STMT_TYPE_IF;
40         stmt->ifstmt.condition = condition;
41         stmt->ifstmt.true_case = true_case;
42         stmt->ifstmt.false_case = false_case;
43         return stmt;
44 }
45 void statement_append(struct grub2_statements *stmts,
46                 struct grub2_statement *stmt)
47 {
48         if (!stmt)
49                 return;
50         list_add_tail(&stmts->list, &stmt->list);
51 }
52
53 struct grub2_word *create_word(struct grub2_parser *parser, const char *text,
54                 bool expand, bool split)
55 {
56         struct grub2_word *word = talloc(parser, struct grub2_word);
57         word->text = talloc_strdup(word, text);
58         word->expand = expand;
59         word->split = split;
60         word->next = NULL;
61         return word;
62 }
63
64 struct grub2_argv *create_argv(struct grub2_parser *parser)
65 {
66         struct grub2_argv *argv = talloc(parser, struct grub2_argv);
67         list_init(&argv->words);
68         return argv;
69 }
70
71 void argv_append(struct grub2_argv *argv, struct grub2_word *word)
72 {
73         list_add_tail(&argv->words, &word->argv_list);
74 }
75
76 void word_append(struct grub2_word *w1, struct grub2_word *w2)
77 {
78         w1->next = w2;
79 }