summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-09-17 15:04:19 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-09-24 13:14:59 +0800
commita33e7992485e95a60add27af37327dc9f0eb3a34 (patch)
tree11c2e116f71d4b3c82fdd7912e54afa9efc35fbe /discover
parentbbf4805d8750a363b1ec78831ad085b8c56a1c99 (diff)
downloadpetitboot-a33e7992485e95a60add27af37327dc9f0eb3a34.zip
petitboot-a33e7992485e95a60add27af37327dc9f0eb3a34.tar.gz
discover/grub2: Implement statement_block_execute
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover')
-rw-r--r--discover/grub2/grub2.h2
-rw-r--r--discover/grub2/parser.y2
-rw-r--r--discover/grub2/script.c9
3 files changed, 12 insertions, 1 deletions
diff --git a/discover/grub2/grub2.h b/discover/grub2/grub2.h
index c7f43de..4d083ae 100644
--- a/discover/grub2/grub2.h
+++ b/discover/grub2/grub2.h
@@ -143,6 +143,8 @@ void script_execute(struct grub2_script *script);
int statement_simple_execute(struct grub2_script *script,
struct grub2_statement *statement);
+int statement_block_execute(struct grub2_script *script,
+ struct grub2_statement *statement);
int statement_if_execute(struct grub2_script *script,
struct grub2_statement *statement);
int statement_menuentry_execute(struct grub2_script *script,
diff --git a/discover/grub2/parser.y b/discover/grub2/parser.y
index 292ce07..6d3ff21 100644
--- a/discover/grub2/parser.y
+++ b/discover/grub2/parser.y
@@ -227,7 +227,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->st.exec = statement_block_execute;
stmt->statements = stmts;
return &stmt->st;
}
diff --git a/discover/grub2/script.c b/discover/grub2/script.c
index 5fb13aa..43259aa 100644
--- a/discover/grub2/script.c
+++ b/discover/grub2/script.c
@@ -9,6 +9,8 @@
#define to_stmt_simple(stmt) \
container_of(stmt, struct grub2_statement_simple, st)
+#define to_stmt_block(stmt) \
+ container_of(stmt, struct grub2_statement_block, st)
#define to_stmt_if(stmt) \
container_of(stmt, struct grub2_statement_if, st)
#define to_stmt_menuentry(stmt) \
@@ -254,6 +256,13 @@ int statement_simple_execute(struct grub2_script *script,
return rc;
}
+int statement_block_execute(struct grub2_script *script,
+ struct grub2_statement *statement)
+{
+ struct grub2_statement_block *st = to_stmt_block(statement);
+ return statements_execute(script, st->statements);
+}
+
/* returns 0 if the statement was executed, 1 otherwise */
static int statement_conditional_execute(struct grub2_script *script,
struct grub2_statement *statement, bool *executed)
OpenPOWER on IntegriCloud