return modname;
}
-int kmod_module_parse_dep(struct kmod_module *mod, char *line)
+int kmod_module_parse_depline(struct kmod_module *mod, char *line)
{
struct kmod_ctx *ctx = mod->ctx;
struct kmod_list *list = NULL;
if (p == NULL)
return 0;
+ *p = '\0';
+ if (mod->path == NULL)
+ mod->path = strdup(line);
+
p++;
for (p = strtok_r(p, " \t", &saveptr); p != NULL;
KMOD_EXPORT struct kmod_list *kmod_module_get_dependencies(const struct kmod_module *mod)
{
- /* TODO: populate dependencies on demand */
struct kmod_list *l, *l_new, *list_new = NULL;
if (mod == NULL)
return NULL;
- if (!mod->init.dep)
- return NULL;
+ if (!mod->init.dep) {
+ /* lazy init */
+ char *line = kmod_search_moddep(mod->ctx, mod->name);
+
+ if (line == NULL)
+ return NULL;
+
+ kmod_module_parse_depline((struct kmod_module *)mod, line);
+ free(line);
+
+ if (!mod->init.dep)
+ return NULL;
+ }
kmod_list_foreach(l, mod->dep) {
l_new = kmod_list_append(list_new, kmod_module_ref(l->data));
int kmod_lookup_alias_from_symbols_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
int kmod_lookup_alias_from_aliases_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
int kmod_lookup_alias_from_moddep_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
+char *kmod_search_moddep(struct kmod_ctx *ctx, const char *name) __attribute__((nonnull(1,2)));
/* libkmod-config.c */
struct kmod_config {
const char *kmod_alias_get_modname(const struct kmod_list *l) __attribute__((nonnull(1)));
/* libkmod-module.c */
-int kmod_module_parse_dep(struct kmod_module *mod, char *line) __attribute__((nonnull(1, 2)));
+int kmod_module_parse_depline(struct kmod_module *mod, char *line) __attribute__((nonnull(1, 2)));
/* libkmod-hash.c */
struct kmod_hash;
static const char *moddep_file = "modules.dep";
-static char *search_moddep(struct kmod_ctx *ctx, const char *name)
+char *kmod_search_moddep(struct kmod_ctx *ctx, const char *name)
{
struct index_file *idx;
char fn[PATH_MAX];
if (strchr(name, ':'))
return 0;
- line = search_moddep(ctx, name);
+ line = kmod_search_moddep(ctx, name);
if (line != NULL) {
struct kmod_module *mod;
}
*list = kmod_list_append(*list, mod);
- kmod_module_parse_dep(mod, line);
+ kmod_module_parse_depline(mod, line);
}
finish: