size_t count;
};
+static void pakfire_packagelist_free(struct pakfire_packagelist* list) {
+ if (list->elements) {
+ for (unsigned int i = 0; i < list->count; i++)
+ pakfire_package_unref(list->elements[i]);
+ free(list->elements);
+ }
+
+ pakfire_unref(list->pakfire);
+ free(list);
+}
+
PAKFIRE_EXPORT int pakfire_packagelist_create(
struct pakfire_packagelist** list, Pakfire pakfire) {
struct pakfire_packagelist* l = calloc(1, sizeof(*l));
for (int i = 0; i < q->count; i++) {
struct pakfire_package* pkg = pakfire_package_create_from_solvable(pakfire, q->elements[i]);
+ if (!pkg)
+ goto ERROR;
+
pakfire_packagelist_push(*list, pkg);
pakfire_package_unref(pkg);
}
return 0;
+
+ERROR:
+ pakfire_packagelist_free(*list);
+ *list = NULL;
+
+ return 1;
}
PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list) {
return list;
}
-static void pakfire_packagelist_free(struct pakfire_packagelist* list) {
- if (list->elements) {
- for (unsigned int i = 0; i < list->count; i++)
- pakfire_package_unref(list->elements[i]);
- free(list->elements);
- }
-
- pakfire_unref(list->pakfire);
- free(list);
-}
-
PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_unref(struct pakfire_packagelist* list) {
if (--list->nrefs > 0)
return list;