]> git.ipfire.org Git - pakfire.git/commitdiff
python: Refactor creating a Python list from package list
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 6 Feb 2025 22:04:14 +0000 (22:04 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 6 Feb 2025 22:05:51 +0000 (22:05 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/python/util.c

index d0cdb73159c4bdd3946d56715686f225b54af4de..7f3be84d2e05980886b0b5e6cda8264fd1a7f37a 100644 (file)
@@ -63,21 +63,35 @@ ERROR:
 }
 
 PyObject* PyList_FromPackageList(struct pakfire_packagelist* packagelist) {
-       PyObject* list = PyList_New(0);
+       struct pakfire_package* package = NULL;
+       PyObject* item = NULL;
 
+       // Determine the length of the list
        const size_t length = pakfire_packagelist_length(packagelist);
 
-       for (size_t i = 0; i < length; i++) {
-               struct pakfire_package* package = pakfire_packagelist_get(packagelist, i);
+       // Create a new list
+       PyObject* list = PyList_New(length);
 
-               PyObject* item = new_package(&PackageType, package);
-               PyList_Append(list, item);
+       for (size_t i = 0; i < length; i++) {
+               package = pakfire_packagelist_get(packagelist, i);
 
+               // Make a new package
+               item = new_package(&PackageType, package);
                pakfire_package_unref(package);
-               Py_DECREF(item);
+
+               // Fail if we could not create a package
+               if (!item)
+                       goto ERROR;
+
+               // Add it to the list
+               PyList_SET_ITEM(list, i, item);
        }
 
        return list;
+
+ERROR:
+       Py_XDECREF(list);
+       return NULL;
 }
 
 PyObject* PyList_FromFileList(struct pakfire_filelist* filelist) {