From: Michael Tremer Date: Fri, 2 Jul 2021 15:37:17 +0000 (+0000) Subject: packagelist: Break creating list from queue X-Git-Tag: 0.9.28~1129 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=97933fba7cbb02f7e112adb8282572223ec98b45;p=pakfire.git packagelist: Break creating list from queue If an invalid package is being returned, we end importing the list and cleanup. Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/packagelist.c b/src/libpakfire/packagelist.c index e6bf25dd8..4cec1d027 100644 --- a/src/libpakfire/packagelist.c +++ b/src/libpakfire/packagelist.c @@ -43,6 +43,17 @@ struct pakfire_packagelist { size_t count; }; +static void pakfire_packagelist_free(struct pakfire_packagelist* list) { + if (list->elements) { + for (unsigned int i = 0; i < list->count; i++) + pakfire_package_unref(list->elements[i]); + free(list->elements); + } + + pakfire_unref(list->pakfire); + free(list); +} + PAKFIRE_EXPORT int pakfire_packagelist_create( struct pakfire_packagelist** list, Pakfire pakfire) { struct pakfire_packagelist* l = calloc(1, sizeof(*l)); @@ -64,11 +75,20 @@ int pakfire_packagelist_create_from_queue(struct pakfire_packagelist** list, Pak for (int i = 0; i < q->count; i++) { struct pakfire_package* pkg = pakfire_package_create_from_solvable(pakfire, q->elements[i]); + if (!pkg) + goto ERROR; + pakfire_packagelist_push(*list, pkg); pakfire_package_unref(pkg); } return 0; + +ERROR: + pakfire_packagelist_free(*list); + *list = NULL; + + return 1; } PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list) { @@ -77,17 +97,6 @@ PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfir return list; } -static void pakfire_packagelist_free(struct pakfire_packagelist* list) { - if (list->elements) { - for (unsigned int i = 0; i < list->count; i++) - pakfire_package_unref(list->elements[i]); - free(list->elements); - } - - pakfire_unref(list->pakfire); - free(list); -} - PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_unref(struct pakfire_packagelist* list) { if (--list->nrefs > 0) return list;