]> git.ipfire.org Git - pakfire.git/commitdiff
packagelists: Split function to import packages from Queue
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 25 Feb 2023 13:51:19 +0000 (13:51 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 25 Feb 2023 13:51:19 +0000 (13:51 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/packagelist.h
src/libpakfire/packagelist.c

index f3d60735e635ffaad76cb2361e09893e0a46c2d7..779c88498eec94524b229403436c523fd8041a79 100644 (file)
@@ -40,7 +40,8 @@ void pakfire_packagelist_push(struct pakfire_packagelist* list, struct pakfire_p
 
 #include <solv/queue.h>
 
-int pakfire_packagelist_create_from_queue(struct pakfire_packagelist** list, struct pakfire* pakfire, Queue* q);
+int pakfire_packagelist_create_from_queue(struct pakfire_packagelist** list,
+       struct pakfire* pakfire, Queue* q) __attribute__ ((deprecated));
 
 typedef int (*pakfire_packagelist_walk_callback)
        (struct pakfire* pakfire, struct pakfire_package* pkg, void* p);
@@ -48,6 +49,8 @@ typedef int (*pakfire_packagelist_walk_callback)
 int pakfire_packagelist_walk(struct pakfire_packagelist* list,
        pakfire_packagelist_walk_callback callback, void* p);
 
+int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list, Queue* q);
+
 #endif
 
 #endif /* PAKFIRE_PACKAGELIST_H */
index 0640cdd9e1ba33f2def01ba66d1615d1fdce82a1..2fc8d1d0cdadcd1811266b61dc4de54073343268 100644 (file)
@@ -66,29 +66,26 @@ PAKFIRE_EXPORT int pakfire_packagelist_create(
 }
 
 int pakfire_packagelist_create_from_queue(struct pakfire_packagelist** list, struct pakfire* pakfire, Queue* q) {
-       struct pakfire_package* pkg = NULL;
+       int r;
 
        // Create a new package list
-       int r = pakfire_packagelist_create(list, pakfire);
+       r = pakfire_packagelist_create(list, pakfire);
        if (r)
-               return r;
+               goto ERROR;
 
-       for (int i = 0; i < q->count; i++) {
-               r = pakfire_package_create_from_solvable(&pkg, pakfire, q->elements[i]);
-               if (r)
-                       goto ERROR;
-
-               pakfire_packagelist_push(*list, pkg);
-               pakfire_package_unref(pkg);
-       }
+       r = pakfire_packagelist_import_solvables(*list, q);
+       if (r)
+               goto ERROR;
 
        return 0;
 
 ERROR:
-       pakfire_packagelist_free(*list);
-       *list = NULL;
+       if (*list) {
+               pakfire_packagelist_free(*list);
+               *list = NULL;
+       }
 
-       return 1;
+       return r;
 }
 
 PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list) {
@@ -144,3 +141,20 @@ int pakfire_packagelist_walk(struct pakfire_packagelist* list,
 
        return r;
 }
+
+int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list, Queue* q) {
+       struct pakfire_package* pkg = NULL;
+       int r;
+
+       // Walk through all elements on the queue
+       for (int i = 0; i < q->count; i++) {
+               r = pakfire_package_create_from_solvable(&pkg, list->pakfire, q->elements[i]);
+               if (r)
+                       return r;
+
+               pakfire_packagelist_push(list, pkg);
+               pakfire_package_unref(pkg);
+       }
+
+       return 0;
+}