From: Michael Tremer Date: Wed, 30 Jun 2021 15:29:18 +0000 (+0000) Subject: Change interface of pakfire_whatrequires X-Git-Tag: 0.9.28~1151 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b055ddf1f7cb608a25edc6849ad931c2a9a5d9dc;p=pakfire.git Change interface of pakfire_whatrequires Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index 363aff7f4..4f0207ec3 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -474,11 +474,16 @@ static PyObject* Pakfire_whatprovides(PakfireObject* self, PyObject* args, PyObj static PyObject* Pakfire_whatrequires(PakfireObject* self, PyObject* args) { const char* requires = NULL; + struct pakfire_packagelist* list = NULL; if (!PyArg_ParseTuple(args, "s", &requires)) return NULL; - struct pakfire_packagelist* list = pakfire_whatrequires(self->pakfire, requires, 0); + int r = pakfire_whatrequires(self->pakfire, requires, 0, &list); + if (r) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } PyObject* obj = PyList_FromPackageList(list); pakfire_packagelist_unref(list); diff --git a/src/libpakfire/include/pakfire/pakfire.h b/src/libpakfire/include/pakfire/pakfire.h index e066e052f..162d00559 100644 --- a/src/libpakfire/include/pakfire/pakfire.h +++ b/src/libpakfire/include/pakfire/pakfire.h @@ -63,7 +63,8 @@ struct pakfire_repolist* pakfire_get_repos(Pakfire pakfire); PakfireRepo pakfire_get_repo(Pakfire pakfire, const char* name); struct pakfire_packagelist* pakfire_whatprovides(Pakfire pakfire, const char* provides, int flags); -struct pakfire_packagelist* pakfire_whatrequires(Pakfire pakfire, const char* what, int flags); +int pakfire_whatrequires(Pakfire pakfire, const char* what, int flags, + struct pakfire_packagelist** list); struct pakfire_packagelist* pakfire_search(Pakfire pakfire, const char* what, int flags); // Logging diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 53b1c0eb2..017ccc57f 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -1389,13 +1389,12 @@ 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; - +PAKFIRE_EXPORT int pakfire_whatrequires(Pakfire pakfire, const char* what, int flags, + struct pakfire_packagelist** list) { // Refresh repositories int r = pakfire_refresh(pakfire, 0); if (r) - return NULL; + return r; // Get the pool ready pakfire_pool_apply_changes(pakfire); @@ -1404,9 +1403,12 @@ PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_whatrequires(Pakfire pakfire, Id dep = pakfire_parse_dep(pakfire, what); if (!dep) { errno = EINVAL; - return NULL; + return 1; } + // Reset pointer + *list = NULL; + Queue matches; queue_init(&matches); @@ -1414,17 +1416,17 @@ PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_whatrequires(Pakfire pakfire, pool_whatmatchesdep(pakfire->pool, SOLVABLE_REQUIRES, dep, &matches, 0); // Create a packagelist - r = pakfire_packagelist_create_from_queue(&list, pakfire, &matches); + r = pakfire_packagelist_create_from_queue(list, pakfire, &matches); if (r) goto ERROR; // Sort the list - pakfire_packagelist_sort(list); + pakfire_packagelist_sort(*list); ERROR: queue_free(&matches); - return list; + return r; } PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_search(Pakfire pakfire, const char* what, int flags) {