From: Michael Tremer Date: Wed, 30 Jun 2021 15:22:50 +0000 (+0000) Subject: packagelist: Refactor creation from queue X-Git-Tag: 0.9.28~1153 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=08551241048150d8ec88c2c3421bdde6a910e91b;p=pakfire.git packagelist: Refactor creation from queue Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/packagelist.h b/src/libpakfire/include/pakfire/packagelist.h index f4e34f82b..beba42a68 100644 --- a/src/libpakfire/include/pakfire/packagelist.h +++ b/src/libpakfire/include/pakfire/packagelist.h @@ -40,7 +40,7 @@ void pakfire_packagelist_push_if_not_exists(struct pakfire_packagelist* list, Pa #include -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 diff --git a/src/libpakfire/packagelist.c b/src/libpakfire/packagelist.c index c23d5e069..791683ce8 100644 --- a/src/libpakfire/packagelist.c +++ b/src/libpakfire/packagelist.c @@ -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; -} diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 209df5e9d..53b1c0eb2 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -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; }