discover/grub2: Add a reference to the context from grub2_script
authorJeremy Kerr <jk@ozlabs.org>
Mon, 16 Sep 2013 07:51:53 +0000 (15:51 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Tue, 24 Sep 2013 05:14:59 +0000 (13:14 +0800)
We'll need the context to add boot options.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
discover/grub2/grub2.h
discover/grub2/parser.y
discover/grub2/script.c

index 149e1e1fba0e6b6712ad61c98cc8eb5dcbee01aa..fca0fa2ee1525b86ef750cdf6548df73a0de52ad 100644 (file)
@@ -79,10 +79,11 @@ struct grub2_command {
 };
 
 struct grub2_script {
 };
 
 struct grub2_script {
-       struct grub2_statements *statements;
-       struct list             environment;
-       struct list             commands;
-       struct list             symtab;
+       struct grub2_statements         *statements;
+       struct list                     environment;
+       struct list                     commands;
+       struct list                     symtab;
+       struct discover_context         *ctx;
 };
 
 struct grub2_parser {
 };
 
 struct grub2_parser {
@@ -135,7 +136,8 @@ int statement_if_execute(struct grub2_script *script,
 int statement_menuentry_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(struct grub2_parser *parser,
+               struct discover_context *ctx);
 
 const char *script_env_get(struct grub2_script *script, const char *name);
 
 
 const char *script_env_get(struct grub2_script *script, const char *name);
 
@@ -159,7 +161,7 @@ bool resolve_grub2_resource(struct device_handler *handler,
                struct resource *res);
 
 /* external parser api */
                struct resource *res);
 
 /* external parser api */
-struct grub2_parser *grub2_parser_create(void *ctx);
+struct grub2_parser *grub2_parser_create(struct discover_context *ctx);
 void grub2_parser_parse(struct grub2_parser *parser, char *buf, int len);
 #endif /* GRUB2_H */
 
 void grub2_parser_parse(struct grub2_parser *parser, char *buf, int len);
 #endif /* GRUB2_H */
 
index f49cecdc3382cb630817b00d071d4ff00dfeaa59..2b229b80598ae63488bd17b0810f0d7f89e26198 100644 (file)
@@ -221,13 +221,13 @@ void word_append(struct grub2_word *w1, struct grub2_word *w2)
        w1->last = w2;
 }
 
        w1->last = w2;
 }
 
-struct grub2_parser *grub2_parser_create(void *ctx)
+struct grub2_parser *grub2_parser_create(struct discover_context *ctx)
 {
        struct grub2_parser *parser;
 
        parser = talloc(ctx, struct grub2_parser);
        yylex_init_extra(parser, &parser->scanner);
 {
        struct grub2_parser *parser;
 
        parser = talloc(ctx, struct grub2_parser);
        yylex_init_extra(parser, &parser->scanner);
-       parser->script = create_script(parser);
+       parser->script = create_script(parser, ctx);
 
        return parser;
 }
 
        return parser;
 }
index 9cc0cfba4b4334a757e8056016ffe56f2db948e3..5b38156822b5f6083eb59fe1bd74a60a6ec7b829 100644 (file)
@@ -300,13 +300,16 @@ void script_execute(struct grub2_script *script)
        statements_execute(script, script->statements);
 }
 
        statements_execute(script, script->statements);
 }
 
-struct grub2_script *create_script(void *ctx)
+struct grub2_script *create_script(struct grub2_parser *parser,
+               struct discover_context *ctx)
 {
        struct grub2_script *script;
 
 {
        struct grub2_script *script;
 
-       script = talloc(ctx, struct grub2_script);
+       script = talloc(parser, struct grub2_script);
 
        init_env(script);
 
        init_env(script);
+       script->ctx = ctx;
+
        list_init(&script->commands);
        register_builtins(script);
 
        list_init(&script->commands);
        register_builtins(script);