Skip to content

Commit

Permalink
discover/grub2: expose internal parse function
Browse files Browse the repository at this point in the history
Upcoming changes will need a method to parse a secondary file (to
support the 'source' command), but not execute it as a new script.

This change exposes the parsing code, separate from the execution code.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
  • Loading branch information
jk-ozlabs committed Nov 29, 2019
1 parent a9a9d57 commit 2c132eb
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 5 deletions.
17 changes: 15 additions & 2 deletions discover/grub2/grub2-parser.y
Expand Up @@ -331,14 +331,15 @@ struct grub2_parser *grub2_parser_create(struct discover_context *ctx)
return parser;
}

void grub2_parser_parse(struct grub2_parser *parser, const char *filename,
/* performs a parse on buf, setting parser->script->statements */
int grub2_parser_parse(struct grub2_parser *parser, const char *filename,
char *buf, int len)
{
YY_BUFFER_STATE bufstate;
int rc;

if (!len)
return;
return -1;

parser->script->filename = filename;

Expand All @@ -349,6 +350,18 @@ void grub2_parser_parse(struct grub2_parser *parser, const char *filename,

yy_delete_buffer(bufstate, parser->scanner);

parser->inter_word = false;

return rc;
}

void grub2_parser_parse_and_execute(struct grub2_parser *parser,
const char *filename, char *buf, int len)
{
int rc;

rc = grub2_parser_parse(parser, filename, buf, len);

if (!rc)
script_execute(parser->script);
}
Expand Down
2 changes: 1 addition & 1 deletion discover/grub2/grub2.c
Expand Up @@ -169,7 +169,7 @@ static int grub2_parse(struct discover_context *dc)
continue;

parser = grub2_parser_create(dc);
grub2_parser_parse(parser, *filename, buf, len);
grub2_parser_parse_and_execute(parser, *filename, buf, len);
device_handler_status_dev_info(dc->handler, dc->device,
_("Parsed GRUB configuration from %s"),
*filename);
Expand Down
8 changes: 6 additions & 2 deletions discover/grub2/grub2.h
Expand Up @@ -204,9 +204,13 @@ struct grub2_file *grub2_parse_file(struct grub2_script *script,
struct discover_device *grub2_lookup_device(struct device_handler *handler,
const char *desc);

/* internal parse api */
int grub2_parser_parse(struct grub2_parser *parser, const char *filename,
char *buf, int len);

/* external parser api */
struct grub2_parser *grub2_parser_create(struct discover_context *ctx);
void grub2_parser_parse(struct grub2_parser *parser, const char *filename,
char *buf, int len);
void grub2_parser_parse_and_execute(struct grub2_parser *parser,
const char *filename, char *buf, int len);
#endif /* GRUB2_H */

0 comments on commit 2c132eb

Please sign in to comment.