---
 libkmod/libkmod-module.c |   41 ++++++++++++++++++++++-------------------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index 0d87ce1..ae0d9c8 100644
--- a/libkmod/libkmod-module.c
+++ b/libkmod/libkmod-module.c
@@ -2094,6 +2094,25 @@ static void kmod_module_info_free(struct 
kmod_module_info *info)
        free(info);
 }
 
+static struct kmod_list *kmod_module_info_append(struct kmod_list **list, 
const char *key, size_t keylen, const char *value, size_t valuelen)
+{
+       struct kmod_module_info *info;
+       struct kmod_list *n;
+
+       info = kmod_module_info_new(key, keylen, value, valuelen);
+       if (info == NULL) {
+               kmod_module_info_free_list(*list);
+               return NULL;
+       }
+       n = kmod_list_append(*list, info);
+       if (n == NULL) {
+               kmod_module_info_free(info);
+               kmod_module_info_free_list(*list);
+       }
+       *list = n;
+       return n;
+}
+
 /**
  * kmod_module_get_info:
  * @mod: kmod module
@@ -2114,7 +2133,7 @@ KMOD_EXPORT int kmod_module_get_info(const struct 
kmod_module *mod, struct kmod_
 {
        struct kmod_elf *elf;
        char **strings;
-       int i, count, ret = 0;
+       int i, count, ret = -ENOMEM;
 
        if (mod == NULL || list == NULL)
                return -ENOENT;
@@ -2130,7 +2149,6 @@ KMOD_EXPORT int kmod_module_get_info(const struct 
kmod_module *mod, struct kmod_
                return count;
 
        for (i = 0; i < count; i++) {
-               struct kmod_module_info *info;
                struct kmod_list *n;
                const char *key, *value;
                size_t keylen, valuelen;
@@ -2146,24 +2164,9 @@ KMOD_EXPORT int kmod_module_get_info(const struct 
kmod_module *mod, struct kmod_
                        valuelen = strlen(value);
                }
 
-               info = kmod_module_info_new(key, keylen, value, valuelen);
-               if (info == NULL) {
-                       ret = -errno;
-                       kmod_module_info_free_list(*list);
-                       *list = NULL;
-                       goto list_error;
-               }
-
-               n = kmod_list_append(*list, info);
-               if (n != NULL)
-                       *list = n;
-               else {
-                       kmod_module_info_free(info);
-                       kmod_module_info_free_list(*list);
-                       *list = NULL;
-                       ret = -ENOMEM;
+               n = kmod_module_info_append(list, key, keylen, value, valuelen);
+               if (n == NULL)
                        goto list_error;
-               }
        }
        ret = count;
 
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to