From 84ee6234aff07b9c701575b22342c4c4c06bc6a1 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 8 Dec 2022 15:11:14 +0000 Subject: [PATCH] filelist: Add pattern filtering to walk Signed-off-by: Michael Tremer --- src/libpakfire/build.c | 6 ++++-- src/libpakfire/compress.c | 2 +- src/libpakfire/filelist.c | 8 ++++++-- src/libpakfire/include/pakfire/filelist.h | 2 +- src/libpakfire/package.c | 4 ++-- src/libpakfire/packager.c | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 48c405378..a3a99b996 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -282,7 +282,8 @@ static int pakfire_build_send_file(struct pakfire* pakfire, static int pakfire_build_send_filelist(struct pakfire* pakfire, void* data, int fd) { const struct pakfire_find_deps_ctx* ctx = (struct pakfire_find_deps_ctx*)data; - return pakfire_filelist_walk(ctx->filelist, pakfire_build_send_file, &fd); + return pakfire_filelist_walk(ctx->filelist, NULL, + pakfire_build_send_file, &fd); } static int pakfire_build_process_deps(struct pakfire* pakfire, @@ -1353,7 +1354,8 @@ static int pakfire_build_check_unpackaged_files(struct pakfire_build* build) { if (length) { ERROR(build->pakfire, "Unpackaged files found:\n"); - r = pakfire_filelist_walk(filelist, __pakfire_build_unpackaged_file, NULL); + r = pakfire_filelist_walk(filelist, NULL, + __pakfire_build_unpackaged_file, NULL); if (r) goto ERROR; diff --git a/src/libpakfire/compress.c b/src/libpakfire/compress.c index 347ec13ef..d0b4dc3c0 100644 --- a/src/libpakfire/compress.c +++ b/src/libpakfire/compress.c @@ -982,7 +982,7 @@ int pakfire_compress(struct pakfire* pakfire, struct archive* archive, } // Walk through the entire filelist - r = pakfire_filelist_walk(filelist, __pakfire_compress, &data); + r = pakfire_filelist_walk(filelist, NULL, __pakfire_compress, &data); if (r) goto ERROR; diff --git a/src/libpakfire/filelist.c b/src/libpakfire/filelist.c index f3d131ac3..e4adbc616 100644 --- a/src/libpakfire/filelist.c +++ b/src/libpakfire/filelist.c @@ -350,7 +350,7 @@ int pakfire_filelist_contains(struct pakfire_filelist* list, const char* pattern } int pakfire_filelist_walk(struct pakfire_filelist* list, - pakfire_filelist_walk_callback callback, void* data) { + const char* pattern, pakfire_filelist_walk_callback callback, void* data) { struct pakfire_file* file = NULL; int r = 0; @@ -358,6 +358,10 @@ int pakfire_filelist_walk(struct pakfire_filelist* list, for (unsigned int i = 0; i < list->size; i++) { file = list->elements[i]; + // Skip any files that don't match the pattern + if (pattern && !pakfire_file_matches(file, pattern)) + continue; + // Call the callback r = callback(list->pakfire, file, data); if (r) @@ -391,7 +395,7 @@ int pakfire_filelist_dump(struct pakfire_filelist* list, int debug) { return 0; #endif - return pakfire_filelist_walk(list, __pakfire_filelist_dump, &debug); + return pakfire_filelist_walk(list, NULL, __pakfire_filelist_dump, &debug); } /* diff --git a/src/libpakfire/include/pakfire/filelist.h b/src/libpakfire/include/pakfire/filelist.h index 6cf963223..ba9d3e320 100644 --- a/src/libpakfire/include/pakfire/filelist.h +++ b/src/libpakfire/include/pakfire/filelist.h @@ -54,7 +54,7 @@ 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); + const char* pattern, pakfire_filelist_walk_callback callback, void* data); int pakfire_filelist_dump(struct pakfire_filelist* list, int debug); int pakfire_filelist_verify(struct pakfire_filelist* list, struct pakfire_filelist* errors); diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index 2c5b2588c..bc1b0c61e 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -1548,7 +1548,7 @@ static int __pakfire_package_set_filelist(struct pakfire* pakfire, PAKFIRE_EXPORT int pakfire_package_set_filelist( struct pakfire_package* pkg, struct pakfire_filelist* filelist) { - return pakfire_filelist_walk(filelist, __pakfire_package_set_filelist, pkg); + return pakfire_filelist_walk(filelist, NULL, __pakfire_package_set_filelist, pkg); } int pakfire_package_set_filelist_from_string(struct pakfire_package* pkg, const char* files) { @@ -1728,7 +1728,7 @@ static int pakfire_package_add_json_filelist( } // Walk through the filelist - r = pakfire_filelist_walk(filelist, __pakfire_package_add_json_filelist, object); + r = pakfire_filelist_walk(filelist, NULL, __pakfire_package_add_json_filelist, object); if (r) goto ERROR; diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index ab5d160f6..7426ec01e 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -667,7 +667,7 @@ static int __pakfire_packager_add_files(struct pakfire* pakfire, int pakfire_packager_add_files( struct pakfire_packager* packager, struct pakfire_filelist* filelist) { // Add all files on the filelist - return pakfire_filelist_walk(filelist, __pakfire_packager_add_files, packager); + return pakfire_filelist_walk(filelist, NULL, __pakfire_packager_add_files, packager); } int pakfire_packager_add_scriptlet(struct pakfire_packager* packager, -- 2.39.5