summaryrefslogtreecommitdiffstats
path: root/discover/grub2/grub2.h
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-09-11 10:47:37 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-09-24 13:14:59 +0800
commit1284a547ec73795d7d76dc099426fb89c3359f25 (patch)
tree6fe7ceaf2a502f3bc5b72b4dbf66d12a4a68afd8 /discover/grub2/grub2.h
parent2013dd8075a57e5399f080fa8094cc4b464f35cd (diff)
downloadtalos-petitboot-1284a547ec73795d7d76dc099426fb89c3359f25.tar.gz
talos-petitboot-1284a547ec73795d7d76dc099426fb89c3359f25.zip
discover/grub2: Add structures & API for parser
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/grub2/grub2.h')
-rw-r--r--discover/grub2/grub2.h77
1 files changed, 76 insertions, 1 deletions
diff --git a/discover/grub2/grub2.h b/discover/grub2/grub2.h
index f2a780d..2c7951a 100644
--- a/discover/grub2/grub2.h
+++ b/discover/grub2/grub2.h
@@ -1,10 +1,85 @@
#ifndef GRUB2_H
#define GRUB2_H
+#include <stdbool.h>
+#include <list/list.h>
+
+struct grub2_parser;
+
+struct grub2_word {
+ const char *text;
+ bool expand;
+ bool split;
+ struct grub2_word *next;
+ struct list_item argv_list;
+};
+
+struct grub2_argv {
+ struct list words;
+};
+
+struct grub2_statement_simple {
+ struct grub2_argv *argv;
+};
+
+struct grub2_statement_menuentry {
+ struct grub2_argv *argv;
+ struct grub2_statements *statements;
+};
+
+struct grub2_statement_if {
+ struct grub2_statement *condition;
+ struct grub2_statements *true_case;
+ struct grub2_statements *false_case;
+};
+
+struct grub2_statement {
+ struct list_item list;
+ enum {
+ STMT_TYPE_SIMPLE,
+ STMT_TYPE_MENUENTRY,
+ STMT_TYPE_IF,
+ } type;
+ union {
+ struct grub2_statement_simple simple;
+ struct grub2_statement_menuentry menuentry;
+ struct grub2_statement_if ifstmt;
+ };
+};
+
+struct grub2_statements {
+ struct list list;
+};
+
struct grub2_parser {
- void *scanner;
+ void *scanner;
+ struct grub2_statements *statements;
};
+struct grub2_statements *create_statements(struct grub2_parser *parser);
+
+struct grub2_statement *create_statement_simple(struct grub2_parser *parser,
+ struct grub2_argv *argv);
+
+struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
+ struct grub2_argv *argv, struct grub2_statements *stmts);
+
+struct grub2_statement *create_statement_if(struct grub2_parser *parser,
+ struct grub2_statement *condition,
+ struct grub2_statements *true_case,
+ struct grub2_statements *false_case);
+
+struct grub2_word *create_word(struct grub2_parser *parser, const char *text,
+ bool expand, bool split);
+
+struct grub2_argv *create_argv(struct grub2_parser *parser);
+
+void statement_append(struct grub2_statements *stmts,
+ struct grub2_statement *stmt);
+
+void argv_append(struct grub2_argv *argv, struct grub2_word *word);
+
+void word_append(struct grub2_word *w1, struct grub2_word *w2);
#endif /* GRUB2_H */
OpenPOWER on IntegriCloud