From: Michael Tremer Date: Mon, 5 Sep 2022 13:18:12 +0000 (+0000) Subject: filelist: Add function to walk through filelist X-Git-Tag: 0.9.28~334 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c258ca9ba7e30b82c112b16b3757ac73d6d0f475;p=pakfire.git filelist: Add function to walk through filelist Signed-off-by: Michael Tremer --- 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