]> git.ozlabs.org Git - petitboot/blobdiff - discover/kboot-parser.c
Various fixups and checks to make scan-build happy
[petitboot] / discover / kboot-parser.c
index bf9c5eb2fe98f5f59056cad85f47e018cb31a674..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 }
 };
 
@@ -145,15 +150,18 @@ static const char *const kboot_conf_files[] = {
        "/kboot.cnf",
        "/etc/kboot.conf",
        "/etc/kboot.cnf",
+       "/boot/kboot.conf",
+       "/boot/kboot.cnf",
        "/KBOOT.CONF",
        "/KBOOT.CNF",
        "/ETC/KBOOT.CONF",
        "/ETC/KBOOT.CNF",
+       "/BOOT/KBOOT.CONF",
+       "/BOOT/KBOOT.CNF",
        NULL
 };
 
 static const char *const kboot_ignored_names[] = {
-       "default",
        "delay",
        "message",
        "timeout",
@@ -163,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);
@@ -184,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;