From: Michael Tremer Date: Sat, 25 Feb 2023 13:51:19 +0000 (+0000) Subject: packagelists: Split function to import packages from Queue X-Git-Tag: 0.9.29~377 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a230140a2610db3ff1bc36fdfdd928564d55c905;p=pakfire.git packagelists: Split function to import packages from Queue Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/packagelist.h b/src/libpakfire/include/pakfire/packagelist.h index f3d60735e..779c88498 100644 --- a/src/libpakfire/include/pakfire/packagelist.h +++ b/src/libpakfire/include/pakfire/packagelist.h @@ -40,7 +40,8 @@ void pakfire_packagelist_push(struct pakfire_packagelist* list, struct pakfire_p #include -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 */ diff --git a/src/libpakfire/packagelist.c b/src/libpakfire/packagelist.c index 0640cdd9e..2fc8d1d0c 100644 --- a/src/libpakfire/packagelist.c +++ b/src/libpakfire/packagelist.c @@ -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; +}