else
mod->relpath = NULL;
- err = array_append(&depmod->modules, mod);
- if (err < 0) {
- free(mod);
- return err;
- }
-
err = hash_add_unique(depmod->modules_by_name, mod->modname, mod);
if (err < 0) {
ERR("hash_add_unique %s: %s\n", mod->modname, strerror(-err));
- array_pop(&depmod->modules);
free(mod);
return err;
}
ERR("hash_add_unique %s: %s\n",
mod->relpath, strerror(-err));
hash_del(depmod->modules_by_name, mod->modname);
- array_pop(&depmod->modules);
free(mod);
return err;
}
hash_del(depmod->modules_by_name, mod->modname);
- assert(depmod->modules.array[mod->idx] == mod);
- array_remove_at(&depmod->modules, mod->idx);
-
mod_free(mod);
return 0;
}
return a->sort_idx - b->sort_idx;
}
+static int depmod_modules_build_array(struct depmod *depmod)
+{
+ struct hash_iter module_iter;
+ const void *mod;
+ int err;
+
+ hash_iter_init(depmod->modules_by_name, &module_iter);
+ while (hash_iter_next(&module_iter, NULL, &mod)) {
+ err = array_append(&depmod->modules, mod);
+ if (err < 0)
+ return err;
+ }
+
+ return 0;
+}
+
static void depmod_modules_sort(struct depmod *depmod)
{
char order_file[PATH_MAX], line[PATH_MAX];
}
}
+ err = depmod_modules_build_array(&depmod);
+ if (err < 0) {
+ CRIT("could not build module array: %s\n",
+ strerror(-err));
+ goto cmdline_modules_failed;
+ }
+
depmod_modules_sort(&depmod);
err = depmod_load(&depmod);
if (err < 0)