goto ERROR;
}
+ // Create a new list
+ r = pakfire_packagelist_create(&packages, pkg->pakfire);
+ if (r)
+ goto ERROR;
+
// Fetch all installed packages
- r = pakfire_repo_create_packagelist(repo, &packages);
+ r = pakfire_repo_to_packagelist(repo, packages);
if (r) {
ERROR(pkg->pakfire, "Could not fetch packages from installed repository: %m\n");
goto ERROR;
return r;
}
-/*
- This function appends the IDs of all solvables to the given Queue
-*/
-static int pakfire_repo_to_queue(struct pakfire_repo* repo, Queue* q) {
- Repo* _repo = repo->repo;
+int pakfire_repo_to_packagelist(struct pakfire_repo* repo,
+ struct pakfire_packagelist* list) {
+ struct pakfire_package* pkg = NULL;
Solvable* s = NULL;
Id id;
int i;
-
- // Walk through all Solvables and append them to the queue
- FOR_REPO_SOLVABLES(_repo, i, s) {
- // Convert the solvable into an ID
- id = pool_solvable2id(_repo->pool, s);
-
- queue_push(q, id);
- }
-
- return 0;
-}
-
-int pakfire_repo_create_packagelist(struct pakfire_repo* repo,
- struct pakfire_packagelist** list) {
int r;
- Queue q;
- queue_init(&q);
+ FOR_REPO_SOLVABLES(repo->repo, i, s) {
+ // Convert the solvable into an ID
+ id = pool_solvable2id(repo->repo->pool, s);
- // Create a queue with all Solvables
- r = pakfire_repo_to_queue(repo, &q);
- if (r)
- goto ERROR;
+ // Create a new package
+ r = pakfire_package_create_from_solvable(&pkg, repo->pakfire, id);
+ if (r)
+ return r;
- // Create the packagelist
- r = pakfire_packagelist_create_from_queue(list, repo->pakfire, &q);
- if (r)
- goto ERROR;
+ // Append the package to the list
+ r = pakfire_packagelist_push(list, pkg);
+ pakfire_package_unref(pkg);
+ if (r)
+ return r;
+ }
// Sort the list
- pakfire_packagelist_sort(*list);
-
-ERROR:
- queue_free(&q);
+ pakfire_packagelist_sort(list);
- return r;
+ return 0;
}