struct pakfire_packagelist;
-struct pakfire_packagelist* pakfire_packagelist_create(Pakfire pakfire);
+int pakfire_packagelist_create(struct pakfire_packagelist** list, Pakfire pakfire);
struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list);
struct pakfire_packagelist* pakfire_packagelist_unref(struct pakfire_packagelist* list);
size_t count;
};
-PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_create(Pakfire pakfire) {
- struct pakfire_packagelist* list = calloc(1, sizeof(*list));
- if (list) {
- DEBUG(pakfire, "Allocated PackageList at %p\n", list);
- list->pakfire = pakfire_ref(pakfire);
- list->nrefs = 1;
- }
+PAKFIRE_EXPORT int pakfire_packagelist_create(
+ struct pakfire_packagelist** list, Pakfire pakfire) {
+ struct pakfire_packagelist* l = calloc(1, sizeof(*l));
+ if (!l)
+ return 1;
- return list;
+ l->pakfire = pakfire_ref(pakfire);
+ l->nrefs = 1;
+
+ *list = l;
+ return 0;
}
PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list) {
}
static void pakfire_packagelist_free(struct pakfire_packagelist* list) {
- DEBUG(list->pakfire, "Releasing PackageList at %p\n", list);
- pakfire_unref(list->pakfire);
-
- for (unsigned int i = 0; i < list->count; i++) {
- pakfire_package_unref(list->elements[i]);
+ if (list->elements) {
+ for (unsigned int i = 0; i < list->count; i++)
+ pakfire_package_unref(list->elements[i]);
+ free(list->elements);
}
- free(list->elements);
+ pakfire_unref(list->pakfire);
free(list);
}
PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_unref(struct pakfire_packagelist* list) {
- if (!list)
- return NULL;
-
if (--list->nrefs > 0)
return list;
}
PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q) {
- struct pakfire_packagelist* list = pakfire_packagelist_create(pakfire);
+ 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]);
}
static struct pakfire_packagelist* pakfire_pool_dataiterator(Pakfire pakfire, const char* what, int key, int flags) {
- struct pakfire_packagelist* list = pakfire_packagelist_create(pakfire);
+ struct pakfire_packagelist* list = NULL;
+
+ int r = pakfire_packagelist_create(&list, pakfire);
+ if (r)
+ return NULL;
+
pakfire_pool_apply_changes(pakfire);
int di_flags = 0;
}
static struct pakfire_packagelist* pakfire_search_name(Pakfire pakfire, const char* name, int flags) {
+ struct pakfire_packagelist* list = NULL;
+
if (!flags) {
- struct pakfire_packagelist* list = pakfire_packagelist_create(pakfire);
+ int r = pakfire_packagelist_create(&list, pakfire);
+ if (r)
+ return NULL;
+
pakfire_pool_apply_changes(pakfire);
Id id = pool_str2id(pakfire->pool, name, 0);
}
static struct pakfire_packagelist* pakfire_search_provides(Pakfire pakfire, const char* provides, int flags) {
+ struct pakfire_packagelist* list = NULL;
+
if (!flags) {
- struct pakfire_packagelist* list = pakfire_packagelist_create(pakfire);
+ int r = pakfire_packagelist_create(&list, pakfire);
+ if (r)
+ return NULL;
+
pakfire_pool_apply_changes(pakfire);
Id id = pool_str2id(pakfire->pool, provides, 0);