From: Michael Tremer Date: Thu, 6 Feb 2025 22:04:14 +0000 (+0000) Subject: python: Refactor creating a Python list from package list X-Git-Tag: 0.9.30~105 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7777c786ea33e531ba1e3e3695a16e18f8676066;p=pakfire.git python: Refactor creating a Python list from package list Signed-off-by: Michael Tremer --- diff --git a/src/python/util.c b/src/python/util.c index d0cdb731..7f3be84d 100644 --- a/src/python/util.c +++ b/src/python/util.c @@ -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) {