]> git.ipfire.org Git - pakfire.git/commitdiff
packagelist: Refactor creation from queue
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 30 Jun 2021 15:22:50 +0000 (15:22 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 30 Jun 2021 15:22:50 +0000 (15:22 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/packagelist.h
src/libpakfire/packagelist.c
src/libpakfire/pakfire.c

index f4e34f82b92c42a3683ff74ec191fd1cdeb898e2..beba42a6802e2621ddd6ebca337cab9e01328c71 100644 (file)
@@ -40,7 +40,7 @@ void pakfire_packagelist_push_if_not_exists(struct pakfire_packagelist* list, Pa
 
 #include <solv/queue.h>
 
-struct pakfire_packagelist* pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q);
+int pakfire_packagelist_create_from_queue(struct pakfire_packagelist** list, Pakfire pakfire, Queue* q);
 
 #endif
 
index c23d5e0691d797b6224106a39f3eca90b2fe42ff..791683ce8828c0bcfadeb520f6e8a15aa063adfc 100644 (file)
@@ -56,6 +56,21 @@ PAKFIRE_EXPORT int pakfire_packagelist_create(
        return 0;
 }
 
+int pakfire_packagelist_create_from_queue(struct pakfire_packagelist** list, Pakfire pakfire, Queue* q) {
+       // Create a new package list
+       int r = pakfire_packagelist_create(list, pakfire);
+       if (r)
+               return r;
+
+       for (int i = 0; i < q->count; i++) {
+               PakfirePackage pkg = pakfire_package_create_from_solvable(pakfire, q->elements[i]);
+               pakfire_packagelist_push(*list, pkg);
+               pakfire_package_unref(pkg);
+       }
+
+       return 0;
+}
+
 PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list) {
        list->nrefs++;
 
@@ -122,20 +137,3 @@ PAKFIRE_EXPORT void pakfire_packagelist_push_if_not_exists(struct pakfire_packag
 
        pakfire_packagelist_push(list, pkg);
 }
-
-struct pakfire_packagelist* pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q) {
-       struct pakfire_packagelist* list = NULL;
-
-       // Create a new package list
-       int r = pakfire_packagelist_create(&list, pakfire);
-       if (r)
-               return NULL;
-
-       for (int i = 0; i < q->count; i++) {
-               PakfirePackage pkg = pakfire_package_create_from_solvable(pakfire, q->elements[i]);
-               pakfire_packagelist_push(list, pkg);
-               pakfire_package_unref(pkg);
-       }
-
-       return list;
-}
index 209df5e9de660ec3193caa7d71c18b0f31b9e855..53b1c0eb2c4cfcfa93f627e7ea1e5b852cc1b9e5 100644 (file)
@@ -1390,6 +1390,8 @@ PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_whatprovides(Pakfire pakfire,
 }
 
 PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_whatrequires(Pakfire pakfire, const char* what, int flags) {
+       struct pakfire_packagelist* list = NULL;
+
        // Refresh repositories
        int r = pakfire_refresh(pakfire, 0);
        if (r)
@@ -1412,15 +1414,15 @@ PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_whatrequires(Pakfire pakfire,
        pool_whatmatchesdep(pakfire->pool, SOLVABLE_REQUIRES, dep, &matches, 0);
 
        // Create a packagelist
-       struct pakfire_packagelist* list = pakfire_packagelist_from_queue(pakfire, &matches);
-
-       // Cleanup
-       queue_free(&matches);
+       r = pakfire_packagelist_create_from_queue(&list, pakfire, &matches);
+       if (r)
+               goto ERROR;
 
        // Sort the list
-       if (list) {
-               pakfire_packagelist_sort(list);
-       }
+       pakfire_packagelist_sort(list);
+
+ERROR:
+       queue_free(&matches);
 
        return list;
 }