Add usage comment to parse_user_event
[petitboot] / discover / parser.c
1
2 #include <stdlib.h>
3
4 #include "pb-protocol/pb-protocol.h"
5 #include <log/log.h>
6
7 #include "device-handler.h"
8 #include "parser.h"
9 #include "parser-utils.h"
10
11 extern struct parser __start_parsers[], __stop_parsers[];
12
13 void iterate_parsers(struct discover_context *ctx)
14 {
15         struct parser *parser;
16         unsigned int count = 0;
17
18         pb_log("trying parsers for %s\n", ctx->device_path);
19
20         for (parser = __start_parsers; parser < __stop_parsers; parser++) {
21                 pb_log("\ttrying parser '%s'\n", parser->name);
22                 count += parser->parse(ctx);
23         }
24         if (!count)
25                 pb_log("\tno boot_options found\n");
26 }
27
28 static int compare_parsers(const void *a, const void *b)
29 {
30         const struct parser *parser_a = a, *parser_b = b;
31
32         if (parser_a->priority > parser_b->priority)
33                 return -1;
34
35         if (parser_a->priority < parser_b->priority)
36                 return 1;
37
38         return 0;
39 }
40
41 void parser_init(void)
42 {
43         /* sort our parsers into descending priority order */
44         qsort(__start_parsers, __stop_parsers - __start_parsers,
45                         sizeof(struct parser), compare_parsers);
46 }