#include <stdlib.h>
-#include "pb-protocol/pb-protocol.h"
+#include "types/types.h"
#include <log/log.h>
#include "device-handler.h"
#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);
}