]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod-module: Add helper for building the module info list
authorMichal Marek <mmarek@suse.cz>
Wed, 16 Jan 2013 09:18:17 +0000 (10:18 +0100)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Wed, 16 Jan 2013 11:53:46 +0000 (09:53 -0200)
libkmod/libkmod-module.c

index 0d87ce1f9b9f76ee7b548985185b6b1889c4b7be..ae0d9c8b6f45e260a9503ecb1a4c01a83a727041 100644 (file)
@@ -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;