]> git.ozlabs.org Git - petitboot/blobdiff - discover/kboot-parser.c
discover/kboot-parser: Recognise 'default' parameter
[petitboot] / discover / kboot-parser.c
index 62512cf9334b1395eb936376a937a3f04c8e0ce6..4c68cd4dc812c784ab0ea671b813a6392e6bfa42 100644 (file)
@@ -126,6 +126,10 @@ out_add:
                                " dtb=%s", dtb);
        }
 
+       if (conf_get_global_option(conf, "default"))
+               opt->is_default = streq(opt->name,
+                               conf_get_global_option(conf, "default"));
+
        conf_strip_str(opt->boot_args);
        conf_strip_str(opt->description);
 
@@ -137,6 +141,7 @@ static struct conf_global_option kboot_global_options[] = {
        { .name = "initrd" },
        { .name = "root" },
        { .name = "video" },
+       { .name = "default" },
        { .name = NULL }
 };
 
@@ -157,7 +162,6 @@ static const char *const kboot_conf_files[] = {
 };
 
 static const char *const kboot_ignored_names[] = {
-       "default",
        "delay",
        "message",
        "timeout",
@@ -167,19 +171,22 @@ static const char *const kboot_ignored_names[] = {
 static int kboot_parse(struct discover_context *dc)
 {
        struct conf_context *conf;
+       struct list *found_list;
        const char * const *filename;
-       char *buf;
-       int len, rc;
 
        /* Support block device boot only at present */
        if (dc->event)
                return -1;
 
        conf = talloc_zero(dc, struct conf_context);
-
        if (!conf)
                return -1;
 
+       found_list = talloc(conf, struct list);
+       if (!found_list)
+               return -1;
+       list_init(found_list);
+
        conf->dc = dc;
        conf->global_options = kboot_global_options,
        conf_init_global_options(conf);
@@ -188,6 +195,12 @@ static int kboot_parse(struct discover_context *dc)
        conf->parser_info = (void *)kboot_ignored_names;
 
        for (filename = kboot_conf_files; *filename; filename++) {
+               int len, rc;
+               char *buf;
+
+               if (!parser_is_unique(dc, dc->device, *filename, found_list))
+                       continue;
+
                rc = parser_request_file(dc, dc->device, *filename, &buf, &len);
                if (rc)
                        continue;