From c258ca9ba7e30b82c112b16b3757ac73d6d0f475 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 5 Sep 2022 13:18:12 +0000 Subject: [PATCH] filelist: Add function to walk through filelist Signed-off-by: Michael Tremer --- src/libpakfire/filelist.c | 31 +++++++++++++++++++++++ src/libpakfire/include/pakfire/filelist.h | 8 ++++++ 2 files changed, 39 insertions(+) diff --git a/src/libpakfire/filelist.c b/src/libpakfire/filelist.c index 637eae648..31d6c2639 100644 --- a/src/libpakfire/filelist.c +++ b/src/libpakfire/filelist.c @@ -94,6 +94,19 @@ PAKFIRE_EXPORT size_t pakfire_filelist_size(struct pakfire_filelist* list) { return list->size; } +size_t pakfire_filelist_total_size(struct pakfire_filelist* list) { + struct pakfire_file* file = NULL; + size_t size = 0; + + for (unsigned int i = 0; i < list->size; i++) { + file = list->elements[i]; + + size += pakfire_file_get_size(file); + } + + return size; +} + PAKFIRE_EXPORT int pakfire_filelist_is_empty(struct pakfire_filelist* list) { return list->size == 0; } @@ -366,6 +379,24 @@ int pakfire_filelist_export(struct pakfire_filelist* list, FILE* f) { return 0; } +int pakfire_filelist_walk(struct pakfire_filelist* list, + pakfire_filelist_walk_callback callback, void* data) { + struct pakfire_file* file = NULL; + int r = 0; + + // Call the callback once for every element on the list + for (unsigned int i = 0; i < list->size; i++) { + file = list->elements[i]; + + // Call the callback + r = callback(list->pakfire, file, data); + if (r) + break; + } + + return r; +} + /* Verifies all files on the filelist */ diff --git a/src/libpakfire/include/pakfire/filelist.h b/src/libpakfire/include/pakfire/filelist.h index da7ac4d5e..22460ad91 100644 --- a/src/libpakfire/include/pakfire/filelist.h +++ b/src/libpakfire/include/pakfire/filelist.h @@ -43,12 +43,20 @@ void pakfire_filelist_sort(struct pakfire_filelist* list); #include +size_t pakfire_filelist_total_size(struct pakfire_filelist* list); + int pakfire_filelist_scan(struct pakfire_filelist* list, const char* root, const char** includes, const char** excludes); int pakfire_filelist_contains(struct pakfire_filelist* list, const char* pattern); int pakfire_filelist_export(struct pakfire_filelist* list, FILE* f); +typedef int (*pakfire_filelist_walk_callback) + (struct pakfire* pakfire, struct pakfire_file* file, void* data); + +int pakfire_filelist_walk(struct pakfire_filelist* list, + pakfire_filelist_walk_callback callback, void* data); + int pakfire_filelist_verify(struct pakfire_filelist* list, struct pakfire_filelist* errors); #endif -- 2.47.3