From bb7f09cd7bf687a6af44c70aa1cfd700443a0b8d Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 23 Aug 2022 14:39:58 +0000 Subject: [PATCH] compress: Add option to collect all extracted files Signed-off-by: Michael Tremer --- src/libpakfire/compress.c | 26 ++++++++++++++++++++--- src/libpakfire/include/pakfire/compress.h | 3 ++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/libpakfire/compress.c b/src/libpakfire/compress.c index 0eeb8b32b..81f7a8316 100644 --- a/src/libpakfire/compress.c +++ b/src/libpakfire/compress.c @@ -28,6 +28,8 @@ #include #include +#include +#include #include #include #include @@ -583,7 +585,8 @@ static void pakfire_extract_progress(void* p) { } static int __pakfire_extract_entry(struct pakfire* pakfire, struct pakfire_extract* data, - struct archive_entry* entry) { + struct archive_entry* entry, struct pakfire_filelist* filelist) { + struct pakfire_file* file = NULL; char buffer[PATH_MAX]; int r; @@ -618,6 +621,18 @@ static int __pakfire_extract_entry(struct pakfire* pakfire, struct pakfire_extra } } + // Add entry to filelist (if requested) + if (filelist) { + r = pakfire_file_create_from_archive_entry(&file, pakfire, entry); + if (r) + goto ERROR; + + // Append the file to the list + r = pakfire_filelist_append(filelist, file); + if (r) + goto ERROR; + } + // Create file & extract payload r = archive_read_extract2(data->archive, entry, data->writer); switch (r) { @@ -638,11 +653,16 @@ static int __pakfire_extract_entry(struct pakfire* pakfire, struct pakfire_extra break; } +ERROR: + if (file) + pakfire_file_unref(file); + return r; } int pakfire_extract(struct pakfire* pakfire, struct archive* archive, - size_t size, const char* prefix, const char* message, int flags) { + size_t size, struct pakfire_filelist* filelist, + const char* prefix, const char* message, int flags) { int r = 1; struct pakfire_extract data = { @@ -697,7 +717,7 @@ int pakfire_extract(struct pakfire* pakfire, struct archive* archive, } // Extract the entry - r = __pakfire_extract_entry(pakfire, &data, entry); + r = __pakfire_extract_entry(pakfire, &data, entry, filelist); if (r) goto ERROR; } diff --git a/src/libpakfire/include/pakfire/compress.h b/src/libpakfire/include/pakfire/compress.h index 1bb24679e..de5c9a648 100644 --- a/src/libpakfire/include/pakfire/compress.h +++ b/src/libpakfire/include/pakfire/compress.h @@ -42,7 +42,8 @@ enum pakfire_extract_flags { }; int pakfire_extract(struct pakfire* pakfire, struct archive* archive, - size_t size, const char* prefix, const char* message, int flags); + size_t size, struct pakfire_filelist* filelist, const char* prefix, + const char* message, int flags); #endif -- 2.47.3