]> git.ozlabs.org Git - petitboot/blobdiff - discover/kboot-parser.c
discover/parser: Hookup parser_is_unique
[petitboot] / discover / kboot-parser.c
index bf9c5eb2fe98f5f59056cad85f47e018cb31a674..e4b36b624a3b5bf376542a3525eb907bb844ee02 100644 (file)
@@ -145,10 +145,14 @@ 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
 };
 
@@ -163,19 +167,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 +191,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;