]> git.ipfire.org Git - pakfire.git/commitdiff
packagelist: Refactor creating package lists
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 30 Jun 2021 15:07:12 +0000 (15:07 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 30 Jun 2021 15:07:12 +0000 (15:07 +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 fac3f0b70072e40feab900af737bed31ae3d30c4..386a30580e89fcdecfcf831acab820976eb0de64 100644 (file)
@@ -25,7 +25,7 @@
 
 struct pakfire_packagelist;
 
-struct pakfire_packagelist* pakfire_packagelist_create(Pakfire pakfire);
+int pakfire_packagelist_create(struct pakfire_packagelist** list, Pakfire pakfire);
 struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list);
 struct pakfire_packagelist* pakfire_packagelist_unref(struct pakfire_packagelist* list);
 
index cf0fb581d05ec08720adc4d33b54a825c18fc4c5..9a58d1afdc9406426c18a611dc99f231c0bdd4ed 100644 (file)
@@ -43,15 +43,17 @@ struct pakfire_packagelist {
        size_t count;
 };
 
-PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_create(Pakfire pakfire) {
-       struct pakfire_packagelist* list = calloc(1, sizeof(*list));
-       if (list) {
-               DEBUG(pakfire, "Allocated PackageList at %p\n", list);
-               list->pakfire = pakfire_ref(pakfire);
-               list->nrefs = 1;
-       }
+PAKFIRE_EXPORT int pakfire_packagelist_create(
+               struct pakfire_packagelist** list, Pakfire pakfire) {
+       struct pakfire_packagelist* l = calloc(1, sizeof(*l));
+       if (!l)
+               return 1;
 
-       return list;
+       l->pakfire = pakfire_ref(pakfire);
+       l->nrefs = 1;
+
+       *list = l;
+       return 0;
 }
 
 PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list) {
@@ -61,21 +63,17 @@ PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfir
 }
 
 static void pakfire_packagelist_free(struct pakfire_packagelist* list) {
-       DEBUG(list->pakfire, "Releasing PackageList at %p\n", list);
-       pakfire_unref(list->pakfire);
-
-       for (unsigned int i = 0; i < list->count; i++) {
-               pakfire_package_unref(list->elements[i]);
+       if (list->elements) {
+               for (unsigned int i = 0; i < list->count; i++)
+                       pakfire_package_unref(list->elements[i]);
+               free(list->elements);
        }
 
-       free(list->elements);
+       pakfire_unref(list->pakfire);
        free(list);
 }
 
 PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_unref(struct pakfire_packagelist* list) {
-       if (!list)
-               return NULL;
-
        if (--list->nrefs > 0)
                return list;
 
@@ -126,7 +124,12 @@ PAKFIRE_EXPORT void pakfire_packagelist_push_if_not_exists(struct pakfire_packag
 }
 
 PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q) {
-       struct pakfire_packagelist* list = pakfire_packagelist_create(pakfire);
+       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]);
index ea6c4d9d84020eba0333ac17a26679547aa7816c..209df5e9de660ec3193caa7d71c18b0f31b9e855 100644 (file)
@@ -1286,7 +1286,12 @@ PakfireRepo pakfire_get_installed_repo(Pakfire pakfire) {
 }
 
 static struct pakfire_packagelist* pakfire_pool_dataiterator(Pakfire pakfire, const char* what, int key, int flags) {
-       struct pakfire_packagelist* list = pakfire_packagelist_create(pakfire);
+       struct pakfire_packagelist* list = NULL;
+
+       int r = pakfire_packagelist_create(&list, pakfire);
+       if (r)
+               return NULL;
+
        pakfire_pool_apply_changes(pakfire);
 
        int di_flags = 0;
@@ -1312,8 +1317,13 @@ static struct pakfire_packagelist* pakfire_pool_dataiterator(Pakfire pakfire, co
 }
 
 static struct pakfire_packagelist* pakfire_search_name(Pakfire pakfire, const char* name, int flags) {
+       struct pakfire_packagelist* list = NULL;
+
        if (!flags) {
-               struct pakfire_packagelist* list = pakfire_packagelist_create(pakfire);
+               int r = pakfire_packagelist_create(&list, pakfire);
+               if (r)
+                       return NULL;
+
                pakfire_pool_apply_changes(pakfire);
 
                Id id = pool_str2id(pakfire->pool, name, 0);
@@ -1338,8 +1348,13 @@ static struct pakfire_packagelist* pakfire_search_name(Pakfire pakfire, const ch
 }
 
 static struct pakfire_packagelist* pakfire_search_provides(Pakfire pakfire, const char* provides, int flags) {
+       struct pakfire_packagelist* list = NULL;
+
        if (!flags) {
-               struct pakfire_packagelist* list = pakfire_packagelist_create(pakfire);
+               int r = pakfire_packagelist_create(&list, pakfire);
+               if (r)
+                       return NULL;
+
                pakfire_pool_apply_changes(pakfire);
 
                Id id = pool_str2id(pakfire->pool, provides, 0);