From: Michael Tremer Date: Tue, 23 Aug 2022 14:39:58 +0000 (+0000) Subject: compress: Add option to collect all extracted files X-Git-Tag: 0.9.28~403 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb7f09cd7bf687a6af44c70aa1cfd700443a0b8d;p=pakfire.git compress: Add option to collect all extracted files Signed-off-by: Michael Tremer --- 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