return 0;
}
+int pakfire_packagelist_create_from_queue(struct pakfire_packagelist** list, Pakfire pakfire, Queue* q) {
+ // Create a new package list
+ int r = pakfire_packagelist_create(list, pakfire);
+ if (r)
+ return r;
+
+ for (int i = 0; i < q->count; i++) {
+ PakfirePackage pkg = pakfire_package_create_from_solvable(pakfire, q->elements[i]);
+ pakfire_packagelist_push(*list, pkg);
+ pakfire_package_unref(pkg);
+ }
+
+ return 0;
+}
+
PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list) {
list->nrefs++;
pakfire_packagelist_push(list, pkg);
}
-
-struct pakfire_packagelist* pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q) {
- struct pakfire_packagelist* list = NULL;
-
- // Create a new package list
- int r = pakfire_packagelist_create(&list, pakfire);
- if (r)
- return NULL;
-
- for (int i = 0; i < q->count; i++) {
- PakfirePackage pkg = pakfire_package_create_from_solvable(pakfire, q->elements[i]);
- pakfire_packagelist_push(list, pkg);
- pakfire_package_unref(pkg);
- }
-
- return list;
-}
}
PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_whatrequires(Pakfire pakfire, const char* what, int flags) {
+ struct pakfire_packagelist* list = NULL;
+
// Refresh repositories
int r = pakfire_refresh(pakfire, 0);
if (r)
pool_whatmatchesdep(pakfire->pool, SOLVABLE_REQUIRES, dep, &matches, 0);
// Create a packagelist
- struct pakfire_packagelist* list = pakfire_packagelist_from_queue(pakfire, &matches);
-
- // Cleanup
- queue_free(&matches);
+ r = pakfire_packagelist_create_from_queue(&list, pakfire, &matches);
+ if (r)
+ goto ERROR;
// Sort the list
- if (list) {
- pakfire_packagelist_sort(list);
- }
+ pakfire_packagelist_sort(list);
+
+ERROR:
+ queue_free(&matches);
return list;
}