From: Michael Tremer Date: Mon, 31 Oct 2022 16:11:06 +0000 (+0000) Subject: packagelist: Add a function to walk through all packages on the list X-Git-Tag: 0.9.28~172 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7dc00ddb2bd6f22689bc4153fe5cbeaaa8f1c63e;p=pakfire.git packagelist: Add a function to walk through all packages on the list Signed-off-by: Michael Tremer --- 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; +}