X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fparser.c;h=beaacccbdb1973e3ccb1ba0b3a1e570f4c87cc61;hp=2b4ddd2668e0e30a808184c004c0aac879b0e938;hb=b49b9c92416ce4b65642dd3395becb4ea083dc2b;hpb=dae4540e417e2bf72dd83b2713a670bde0056ba9 diff --git a/discover/parser.c b/discover/parser.c index 2b4ddd2..beaaccc 100644 --- a/discover/parser.c +++ b/discover/parser.c @@ -8,39 +8,34 @@ #include "parser.h" #include "parser-utils.h" -extern struct parser __start_parsers[], __stop_parsers[]; +struct parser __grub2_parser; +struct parser __kboot_parser; +struct parser __native_parser; +struct parser __yaboot_parser; + +static const struct parser *const parsers[] = { +// &__native_parser, + &__kboot_parser, + &__grub2_parser, + &__yaboot_parser, + NULL +}; void iterate_parsers(struct discover_context *ctx) { - struct parser *parser; + int i; + unsigned int count = 0; pb_log("trying parsers for %s\n", ctx->device_path); - for (parser = __start_parsers; parser < __stop_parsers; parser++) { - pb_log("\ttrying parser '%s'\n", parser->name); - /* just use a dummy device path for now */ - if (parser->parse(ctx)) - return; + for (i = 0; parsers[i]; i++) { + pb_log("\ttrying parser '%s'\n", parsers[i]->name); + count += parsers[i]->parse(ctx); } - pb_log("\tno boot_options found\n"); -} - -static int compare_parsers(const void *a, const void *b) -{ - const struct parser *parser_a = a, *parser_b = b; - - if (parser_a->priority > parser_b->priority) - return -1; - - if (parser_a->priority < parser_b->priority) - return 1; - - return 0; + if (!count) + pb_log("\tno boot_options found\n"); } void parser_init(void) { - /* sort our parsers into descending priority order */ - qsort(__start_parsers, __stop_parsers - __start_parsers, - sizeof(struct parser), compare_parsers); }