kmod-depmod: dump modules.dep.bin
diff --git a/tools/kmod-depmod.c b/tools/kmod-depmod.c
index cfa423c..a5ec631 100644
--- a/tools/kmod-depmod.c
+++ b/tools/kmod-depmod.c
@@ -2262,6 +2262,89 @@
return 0;
}
+static int output_deps_bin(struct depmod *depmod, FILE *out)
+{
+ 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 **deps, *mod = depmod->modules.array[i];
+ const char *p = mod_get_compressed_path(mod);
+ char *line;
+ size_t j, n_deps, linepos, linelen, slen;
+ int duplicate;
+
+ if (mod->dep_loop) {
+ DBG("Ignored %s due dependency loops\n", p);
+ continue;
+ }
+
+ deps = mod_get_all_sorted_dependencies(mod, &n_deps);
+ if (deps == NULL && n_deps > 0) {
+ ERR("Could not get all sorted dependencies of %s\n", p);
+ continue;
+ }
+
+ linelen = strlen(p) + 1;
+ for (j = 0; j < n_deps; j++) {
+ const struct mod *d = deps[j];
+ if (d->dep_loop) {
+ DBG("Ignored %s (dependency of %s) "
+ "due dependency loops\n",
+ mod_get_compressed_path(d), p);
+ continue;
+ }
+ linelen += 1 + strlen(mod_get_compressed_path(d));
+ }
+
+ line = malloc(linelen + 1);
+ if (line == NULL) {
+ free(deps);
+ ERR("modules.deps.bin: out of memory\n");
+ continue;
+ }
+
+ linepos = 0;
+ slen = strlen(p);
+ memcpy(line + linepos, p, slen);
+ linepos += slen;
+ line[linepos] = ':';
+ linepos++;
+
+ for (j = 0; j < n_deps; j++) {
+ const struct mod *d = deps[j];
+ const char *dp;
+ if (d->dep_loop)
+ continue;
+ line[linepos] = ' ';
+ linepos++;
+
+ dp = mod_get_compressed_path(d);
+ slen = strlen(dp);
+ memcpy(line + linepos, dp, slen);
+ linepos += slen;
+ }
+ line[linepos] = '\0';
+
+ duplicate = index_insert(idx, mod->modname, line, mod->idx);
+ if (duplicate && depmod->cfg->warn_dups)
+ WRN("duplicate module deps:\n%s\n", line);
+ free(line);
+ }
+
+ index_write(idx, out);
+ index_destroy(idx);
+
+ return 0;
+}
+
static int output_aliases(struct depmod *depmod, FILE *out)
{
size_t i;
@@ -2532,7 +2615,7 @@
int (*cb)(struct depmod *depmod, FILE *out);
} *itr, depfiles[] = {
{"modules.dep", output_deps},
- //{"modules.dep.bin", output_deps_bin},
+ {"modules.dep.bin", output_deps_bin},
{"modules.alias", output_aliases},
{"modules.alias.bin", output_aliases_bin},
{"modules.softdep", output_softdeps},