]> git.ipfire.org Git - pakfire.git/commitdiff
Change interface of pakfire_whatrequires
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 30 Jun 2021 15:29:18 +0000 (15:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 30 Jun 2021 15:39:25 +0000 (15:39 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/pakfire.c
src/libpakfire/include/pakfire/pakfire.h
src/libpakfire/pakfire.c

index 363aff7f4091928b6680cfc864870ca2b6feb0a9..4f0207ec36cbf9a5300aacede638e07428843425 100644 (file)
@@ -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);
index e066e052f21d9ead9f077d747fbf85044d4be198..162d0055922ab3e67c9facea104a34f8e1460c37 100644 (file)
@@ -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
index 53b1c0eb2c4cfcfa93f627e7ea1e5b852cc1b9e5..017ccc57f1e59957e5b6d26b2d0ae7c3265851ca 100644 (file)
@@ -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) {