]> git.ipfire.org Git - pakfire.git/commitdiff
request: Allow to solve a request without returning a transaction & problems
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 31 Oct 2022 17:59:56 +0000 (17:59 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 31 Oct 2022 17:59:56 +0000 (17:59 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/request.c

index 8607d93202195a07371430d2088cce03c5d6d50f..85855851d5f09725f455f98cebcd2f34347f6656 100644 (file)
@@ -240,7 +240,7 @@ static int pakfire_request_get_problems(struct pakfire_request* request,
 ERROR:
        if (*problems) {
                for (struct pakfire_problem** _problem = *problems; *_problem; _problem++)
-                       free(*_problem);
+                       pakfire_problem_unref(*_problem);
                free(*problems);
 
                // Reset pointer
@@ -258,8 +258,10 @@ PAKFIRE_EXPORT int pakfire_request_solve(struct pakfire_request* request,
        pakfire_pool_internalize(request->pakfire);
 
        // Reset pointers
-       *transaction = NULL;
-       *problems = NULL;
+       if (transaction)
+               *transaction = NULL;
+       if (problems)
+               *problems = NULL;
 
 #ifdef ENABLE_DEBUG
        Pool* pool = pakfire_get_solv_pool(request->pakfire);
@@ -279,9 +281,11 @@ PAKFIRE_EXPORT int pakfire_request_solve(struct pakfire_request* request,
 #endif
 
                // Fetch problems
-               r = pakfire_request_get_problems(request, problems);
-               if (r)
-                       return r;
+               if (problems) {
+                       r = pakfire_request_get_problems(request, problems);
+                       if (r)
+                               return r;
+               }
 
                return 2;
        }
@@ -297,15 +301,17 @@ PAKFIRE_EXPORT int pakfire_request_solve(struct pakfire_request* request,
 #endif
 
        // If the solving process was successful, we create the transaction
-       r = pakfire_transaction_create(transaction, request->pakfire, request->solver);
-       if (r)
-               goto ERROR;
+       if (transaction) {
+               r = pakfire_transaction_create(transaction, request->pakfire, request->solver);
+               if (r)
+                       goto ERROR;
+       }
 
        // All okay
        return 0;
 
 ERROR:
-       if (*transaction)
+       if (transaction && *transaction)
                pakfire_transaction_unref(*transaction);
 
        return r;