From b14dcfdab3acc6e67ad97bbf1439333bcdf0357a Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Wed, 30 Nov 2011 20:29:51 -0200 Subject: [PATCH] Prepare lookup function for more files to look after --- libkmod/libkmod-module.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c index 7466805f..4a4dc563 100644 --- a/libkmod/libkmod-module.c +++ b/libkmod/libkmod-module.c @@ -153,6 +153,14 @@ KMOD_EXPORT struct kmod_module *kmod_module_ref(struct kmod_module *mod) return mod; } +#define CHECK_ERR_AND_FINISH(_err, _label_err, _list, label_finish) \ + do { \ + if ((_err) < 0) \ + goto _label_err; \ + if (*(_list) != NULL) \ + goto finish; \ + } while (0) + KMOD_EXPORT int kmod_module_new_from_lookup(struct kmod_ctx *ctx, const char *alias, struct kmod_list **list) @@ -169,15 +177,20 @@ KMOD_EXPORT int kmod_module_new_from_lookup(struct kmod_ctx *ctx, return -ENOSYS; } + /* Aliases from config file override all the others */ err = kmod_lookup_alias_from_config(ctx, alias, list); + CHECK_ERR_AND_FINISH(err, fail, list, finish); - if (err < 0) { - kmod_module_unref_list(*list); - *list = NULL; - } + +finish: return err; +fail: + kmod_module_unref_list(*list); + *list = NULL; } +#undef CHECK_ERR_AND_FINISH + KMOD_EXPORT int kmod_module_unref_list(struct kmod_list *list) { -- 2.47.2