diff options
-rw-r--r-- | libkmod/libkmod-internal.h | 1 | ||||
-rw-r--r-- | libkmod/libkmod-module.c | 40 |
2 files changed, 41 insertions, 0 deletions
diff --git a/libkmod/libkmod-internal.h b/libkmod/libkmod-internal.h index df01df1..ee4b97b 100644 --- a/libkmod/libkmod-internal.h +++ b/libkmod/libkmod-internal.h @@ -145,6 +145,7 @@ void kmod_module_set_visited(struct kmod_module *mod, bool visited) __attribute_ void kmod_module_set_builtin(struct kmod_module *mod, bool builtin) __attribute__((nonnull((1)))); void kmod_module_set_required(struct kmod_module *mod, bool required) __attribute__((nonnull(1))); bool kmod_module_is_builtin(struct kmod_module *mod) __attribute__((nonnull(1))); +int kmod_module_get_builtin(struct kmod_ctx *ctx, struct kmod_list **list) __attribute__((nonnull(1, 2))); /* libkmod-file.c */ struct kmod_file *kmod_file_open(const struct kmod_ctx *ctx, const char *filename) _must_check_ __attribute__((nonnull(1,2))); diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c index bffe715..8fbabd2 100644 --- a/libkmod/libkmod-module.c +++ b/libkmod/libkmod-module.c @@ -2866,3 +2866,43 @@ KMOD_EXPORT void kmod_module_dependency_symbols_free_list(struct kmod_list *list list = kmod_list_remove(list); } } + +/** + * kmod_module_get_builtin: + * @ctx: kmod library context + * @list: where to save the builtin module list + * + * Returns: 0 on success or < 0 otherwise. + */ +int kmod_module_get_builtin(struct kmod_ctx *ctx, struct kmod_list **list) +{ + struct kmod_builtin_iter *iter; + int err = 0; + + iter = kmod_builtin_iter_new(ctx); + if (!iter) + return -errno; + + while (kmod_builtin_iter_next(iter)) { + struct kmod_module *mod = NULL; + char modname[PATH_MAX]; + + if (!kmod_builtin_iter_get_modname(iter, modname)) { + err = -errno; + goto fail; + } + + kmod_module_new_from_name(ctx, modname, &mod); + kmod_module_set_builtin(mod, true); + + *list = kmod_list_append(*list, mod); + } + + kmod_builtin_iter_free(iter); + return err; +fail: + kmod_builtin_iter_free(iter); + kmod_module_unref_list(*list); + *list = NULL; + return err; +} |