#include <pakfire/problem.h>
-struct pakfire_solution* pakfire_solution_create(struct pakfire_problem* problem, Id id);
+int pakfire_solution_create(struct pakfire_solution** solution,
+ struct pakfire_problem* problem, Id id);
struct pakfire_solution* pakfire_solution_ref(struct pakfire_solution* solution);
struct pakfire_solution* pakfire_solution_unref(struct pakfire_solution* solution);
}
PAKFIRE_EXPORT struct pakfire_solution* pakfire_problem_get_solutions(struct pakfire_problem* problem) {
+ struct pakfire_solution* s = NULL;
struct pakfire_solution* ret = NULL;
Solver* solver = pakfire_request_get_solver(problem->request);
Id solution = 0;
while ((solution = solver_next_solution(solver, problem->id, solution)) != 0) {
- struct pakfire_solution* s = pakfire_solution_create(problem, solution);
+ pakfire_solution_create(&s, problem, solution);
if (ret)
pakfire_solution_append(ret, s);
pakfire_request_unref(request);
}
-PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_create(struct pakfire_problem* problem, Id id) {
- Pakfire pakfire = pakfire_problem_get_pakfire(problem);
+PAKFIRE_EXPORT int pakfire_solution_create(struct pakfire_solution** solution,
+ struct pakfire_problem* problem, Id id) {
+ struct pakfire_solution* s = calloc(1, sizeof(*s));
+ if (!s)
+ return 1;
- struct pakfire_solution* solution = calloc(1, sizeof(*solution));
- if (solution) {
- DEBUG(pakfire, "Allocated Solution at %p\n", solution);
- solution->pakfire = pakfire_ref(pakfire);
- solution->nrefs = 1;
+ s->pakfire = pakfire_problem_get_pakfire(problem);
+ s->nrefs = 1;
- solution->problem = pakfire_problem_ref(problem);
- solution->id = id;
+ // Store a reference to the problem
+ s->problem = pakfire_problem_ref(problem);
+ s->id = id;
- // Extract information from solver
- import_elements(solution);
- }
-
- pakfire_unref(pakfire);
+ // Extract information from solver
+ import_elements(s);
- return solution;
+ *solution = s;
+ return 0;
}
PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_ref(struct pakfire_solution* solution) {
}
static void pakfire_solution_free(struct pakfire_solution* solution) {
- DEBUG(solution->pakfire, "Releasing Solution at %p\n", solution);
pakfire_unref(solution->pakfire);
if (solution->next)