]> git.ipfire.org Git - pakfire.git/commitdiff
filelist: Add function to walk through filelist
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 5 Sep 2022 13:18:12 +0000 (13:18 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 5 Sep 2022 13:18:12 +0000 (13:18 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/filelist.c
src/libpakfire/include/pakfire/filelist.h

index 637eae6481852301b159f6cab59b736641edc161..31d6c2639f4f57961a4b036aa5bcb33099a3e9c5 100644 (file)
@@ -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
 */
index da7ac4d5e95f1ea3be32f944d6c09a824c4c8861..22460ad911cf12d8a2c0ab7a547ad490c58100b1 100644 (file)
@@ -43,12 +43,20 @@ void pakfire_filelist_sort(struct pakfire_filelist* list);
 
 #include <stdio.h>
 
+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