]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
kmod-depmod: dump modules.alias.bin
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Sat, 24 Dec 2011 01:21:09 +0000 (23:21 -0200)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Tue, 27 Dec 2011 14:09:16 +0000 (12:09 -0200)
tools/kmod-depmod.c

index cb55204b2238603df6f6fc1d44609250e3aa58ae..cfa423c047d5fd0a211090c1a492d64683637e3c 100644 (file)
@@ -2290,6 +2290,54 @@ static int output_aliases(struct depmod *depmod, FILE *out)
        return 0;
 }
 
+static int output_aliases_bin(struct depmod *depmod, FILE *out)
+{
+       char buf[1024];
+       struct index_node *idx;
+       size_t i;
+
+       if (out == stdout)
+               return 0;
+
+       idx = index_create();
+       if (idx == NULL)
+               return -ENOMEM;
+
+       for (i = 0; i < depmod->modules.count; i++) {
+               const struct mod *mod = depmod->modules.array[i];
+               struct kmod_list *l, *list = NULL;
+               int r = kmod_module_get_info(mod->kmod, &list);
+               if (r < 0 || list == NULL)
+                       continue;
+               kmod_list_foreach(l, list) {
+                       const char *key = kmod_module_info_get_key(l);
+                       const char *value = kmod_module_info_get_value(l);
+                       const char *modname, *alias;
+                       int duplicate;
+
+                       if (!streq(key, "alias"))
+                               continue;
+
+                       alias = underscores(value, buf, sizeof(buf));
+                       if (alias == NULL)
+                               continue;
+
+                       modname = kmod_module_get_name(mod->kmod);
+                       duplicate = index_insert(idx, alias, modname,
+                                                mod->idx);
+                       if (duplicate && depmod->cfg->warn_dups)
+                               WRN("duplicate module alias:\n%s %s\n",
+                                   alias, modname);
+               }
+               kmod_module_info_free_list(list);
+       }
+
+       index_write(idx, out);
+       index_destroy(idx);
+
+       return 0;
+}
+
 static int output_softdeps(struct depmod *depmod, FILE *out)
 {
        size_t i;
@@ -2486,7 +2534,7 @@ static int depmod_output(struct depmod *depmod, FILE *out)
                {"modules.dep", output_deps},
                //{"modules.dep.bin", output_deps_bin},
                {"modules.alias", output_aliases},
-               //{"modules.alias.bin", output_aliases_bin},
+               {"modules.alias.bin", output_aliases_bin},
                {"modules.softdep", output_softdeps},
                {"modules.symbols", output_symbols},
                {"modules.symbols.bin", output_symbols_bin},