diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-09-11 10:47:37 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-09-24 13:14:59 +0800 |
commit | 1284a547ec73795d7d76dc099426fb89c3359f25 (patch) | |
tree | 6fe7ceaf2a502f3bc5b72b4dbf66d12a4a68afd8 /discover/grub2/grub2.h | |
parent | 2013dd8075a57e5399f080fa8094cc4b464f35cd (diff) | |
download | talos-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.h | 77 |
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 */ |