diff options
Diffstat (limited to 'modalias.c')
-rw-r--r-- | modalias.c | 24 |
1 files changed, 14 insertions, 10 deletions
@@ -24,7 +24,7 @@ static void get_version(void) { } -char*dirname; +char *dirname, *dkms_file; static void set_default_alias_file(void) { struct utsname rel_buf; @@ -51,11 +51,8 @@ static void set_default_alias_file(void) { } } -char *modalias_resolve_module(const char *modalias) { +struct kmod_ctx* modalias_init() { struct kmod_ctx *ctx; - struct kmod_list *l, *list = NULL; - int err; - char* dkms_file, *str = NULL; if (!aliasdefault) set_default_alias_file(); @@ -78,11 +75,18 @@ char *modalias_resolve_module(const char *modalias) { ctx = kmod_new(dirname, alias_filelist); if (!ctx) { fputs("Error: kmod_new() failed!\n", stderr); - goto exit; + free(dkms_file); + kmod_unref(ctx); + ctx = NULL; } kmod_load_resources(ctx); + return ctx; +} - err = kmod_module_new_from_lookup(ctx, modalias, &list); +char *modalias_resolve_module(struct kmod_ctx *ctx, const char *modalias) { + struct kmod_list *l, *list = NULL; + char *str = NULL; + int err = kmod_module_new_from_lookup(ctx, modalias, &list); if (err < 0) goto exit; @@ -112,12 +116,12 @@ char *modalias_resolve_module(const char *modalias) { kmod_module_unref_list(list); exit: - free(dkms_file); - kmod_unref(ctx); return str; } -void modalias_cleanup(void) { +void modalias_cleanup(struct kmod_ctx *ctx) { ifree(aliasdefault); ifree(version); + free(dkms_file); + kmod_unref(ctx); } |