]> git.ipfire.org Git - pakfire.git/commitdiff
packagelist: Add a function to walk through all packages on the list
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 31 Oct 2022 16:11:06 +0000 (16:11 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 31 Oct 2022 16:11:06 +0000 (16:11 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/packagelist.h
src/libpakfire/packagelist.c

index a3e88cb68601298ee3d40bb98a0ed7a06292f31c..f3d60735e635ffaad76cb2361e09893e0a46c2d7 100644 (file)
@@ -42,6 +42,12 @@ void pakfire_packagelist_push(struct pakfire_packagelist* list, struct pakfire_p
 
 int pakfire_packagelist_create_from_queue(struct pakfire_packagelist** list, struct pakfire* pakfire, Queue* q);
 
+typedef int (*pakfire_packagelist_walk_callback)
+       (struct pakfire* pakfire, struct pakfire_package* pkg, void* p);
+
+int pakfire_packagelist_walk(struct pakfire_packagelist* list,
+       pakfire_packagelist_walk_callback callback, void* p);
+
 #endif
 
 #endif /* PAKFIRE_PACKAGELIST_H */
index 4942cfaa58a43c2f99fb5411f3e9246712092130..0640cdd9e1ba33f2def01ba66d1615d1fdce82a1 100644 (file)
@@ -131,3 +131,16 @@ PAKFIRE_EXPORT void pakfire_packagelist_push(struct pakfire_packagelist* list, s
        list->elements = solv_extend(list->elements, list->count, 1, sizeof(pkg), BLOCK_SIZE);
        list->elements[list->count++] = pakfire_package_ref(pkg);
 }
+
+int pakfire_packagelist_walk(struct pakfire_packagelist* list,
+               pakfire_packagelist_walk_callback callback, void* p) {
+       int r = 0;
+
+       for (unsigned int i = 0; i < list->count; i++) {
+               r = callback(list->pakfire, list->elements[i], p);
+               if (r)
+                       break;
+       }
+
+       return r;
+}