return mn;
}
+static int avl_modcmp(const void *k1, const void *k2, void *ptr);
+
static struct module *
alloc_module(const char *name, const char * const *aliases, int naliases, const char *depends, int size)
{
m->refcnt = 0;
alloc_module_node(m->name, m, false);
for (i = 0; i < naliases; i++)
- alloc_module_node(aliases[i], m, true);
+ if (avl_modcmp(m->name, aliases[i], NULL))
+ alloc_module_node(aliases[i], m, true);
return m;
}
static int main_modinfo(int argc, char **argv)
{
- struct module *m;
+ struct module_node *mn;
int rv = -1;
char *name;
return -1;
name = get_module_name(argv[1]);
- m = find_module(name);
- if (!m) {
+ mn = avl_find_element(&modules, name, mn, avl);
+ if (!mn) {
ULOG_ERR("cannot find module - %s\n", argv[1]);
goto err;
}
- print_modinfo(m);
-
+ if (!mn->avl.leader)
+ print_modinfo(mn->m);
+ else
+ do {
+ print_modinfo(mn->m);
+ mn = (struct module_node *) mn->avl.list.next;
+ } while (!avl_modcmp(name, mn->avl.key, NULL));
rv = 0;
err:
free_modules();
{
char *exec = basename(*argv);
- avl_init(&modules, avl_modcmp, false, NULL);
+ avl_init(&modules, avl_modcmp, true, NULL);
if (!strcmp(exec, "insmod"))
return main_insmod(argc, argv);