From 7dc00ddb2bd6f22689bc4153fe5cbeaaa8f1c63e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 31 Oct 2022 16:11:06 +0000 Subject: [PATCH] packagelist: Add a function to walk through all packages on the list Signed-off-by: Michael Tremer --- src/libpakfire/include/pakfire/packagelist.h | 6 ++++++ src/libpakfire/packagelist.c | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/libpakfire/include/pakfire/packagelist.h b/src/libpakfire/include/pakfire/packagelist.h index a3e88cb68..f3d60735e 100644 --- a/src/libpakfire/include/pakfire/packagelist.h +++ b/src/libpakfire/include/pakfire/packagelist.h @@ -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 */ diff --git a/src/libpakfire/packagelist.c b/src/libpakfire/packagelist.c index 4942cfaa5..0640cdd9e 100644 --- a/src/libpakfire/packagelist.c +++ b/src/libpakfire/packagelist.c @@ -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; +} -- 2.47.3