]> git.ozlabs.org Git - petitboot/commitdiff
discover/grub2: Add menuentry execution
authorJeremy Kerr <jk@ozlabs.org>
Fri, 13 Sep 2013 07:30:58 +0000 (15:30 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Tue, 24 Sep 2013 05:14:59 +0000 (13:14 +0800)
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
discover/grub2/grub2.h
discover/grub2/parser-api.c
discover/grub2/script.c

index 970c500407eb433de3f7b5ff005b4fb21ea61231..de74fa5a46e43e8ed92c68beb800036a376e215d 100644 (file)
@@ -114,6 +114,8 @@ int statement_simple_execute(struct grub2_script *script,
                struct grub2_statement *statement);
 int statement_if_execute(struct grub2_script *script,
                struct grub2_statement *statement);
                struct grub2_statement *statement);
 int statement_if_execute(struct grub2_script *script,
                struct grub2_statement *statement);
+int statement_menuentry_execute(struct grub2_script *script,
+               struct grub2_statement *statement);
 
 struct grub2_script *create_script(void *ctx);
 
 
 struct grub2_script *create_script(void *ctx);
 
index f8915a1f52b3065b725f215918a1c5d4da669d17..a3166731db809d1176605a9d97051017a487ec98 100644 (file)
@@ -28,7 +28,7 @@ struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
        struct grub2_statement_menuentry *stmt =
                talloc(parser, struct grub2_statement_menuentry);
        stmt->st.type = STMT_TYPE_MENUENTRY;
        struct grub2_statement_menuentry *stmt =
                talloc(parser, struct grub2_statement_menuentry);
        stmt->st.type = STMT_TYPE_MENUENTRY;
-       stmt->st.exec = NULL;
+       stmt->st.exec = statement_menuentry_execute;
        stmt->argv = argv;
        stmt->statements = stmts;
        return &stmt->st;
        stmt->argv = argv;
        stmt->statements = stmts;
        return &stmt->st;
index 536139418d93b89457743bc35688bb03103e0fb6..568e2509b99bc372d094e91909573c2f174dba73 100644 (file)
@@ -10,6 +10,8 @@
        container_of(stmt, struct grub2_statement_simple, st)
 #define to_stmt_if(stmt) \
        container_of(stmt, struct grub2_statement_if, st)
        container_of(stmt, struct grub2_statement_simple, st)
 #define to_stmt_if(stmt) \
        container_of(stmt, struct grub2_statement_if, st)
+#define to_stmt_menuentry(stmt) \
+       container_of(stmt, struct grub2_statement_menuentry, st)
 
 struct env_entry {
        const char              *name;
 
 struct env_entry {
        const char              *name;
@@ -119,6 +121,17 @@ int statement_if_execute(struct grub2_script *script,
        return rc;
 }
 
        return rc;
 }
 
+int statement_menuentry_execute(struct grub2_script *script,
+               struct grub2_statement *statement)
+{
+       struct grub2_statement_menuentry *st = to_stmt_menuentry(statement);
+
+       process_expansions(script, st->argv);
+       statements_execute(script, st->statements);
+
+       return 0;
+}
+
 static void init_env(struct grub2_script *script)
 {
        struct env_entry *env;
 static void init_env(struct grub2_script *script)
 {
        struct env_entry *env;