discover/grub2: Use parser for a single parse
authorJeremy Kerr <jk@ozlabs.org>
Wed, 27 Nov 2013 11:47:37 +0000 (19:47 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Wed, 27 Nov 2013 11:49:33 +0000 (19:49 +0800)
Currently, we re-use a grub2 parser for different filenames, and will
create one even if we find no matching files.

This change only creates a parser if parser_request_file succeeds, and
free() (and exits the parse) immediately after.

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

index e942f6880ddde8c3c48ffd05f5d7f0228b6fe77b..ffb6ecefcb5ab13a166cbdab8a0092db85a81ccd 100644 (file)
@@ -97,18 +97,18 @@ static int grub2_parse(struct discover_context *dc)
        if (dc->event)
                return -1;
 
-       parser = grub2_parser_create(dc);
-
        for (filename = grub2_conf_files; *filename; filename++) {
                rc = parser_request_file(dc, dc->device, *filename, &buf, &len);
                if (rc)
                        continue;
 
+               parser = grub2_parser_create(dc);
                grub2_parser_parse(parser, buf, len);
                talloc_free(buf);
+               talloc_free(parser);
+               break;
        }
 
-       talloc_free(parser);
 
        return 0;
 }