From: Michael Tremer Date: Tue, 20 Apr 2021 11:31:58 +0000 (+0000) Subject: archive: Keep filelist when extracting files X-Git-Tag: 0.9.28~1285^2~303 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b2f57b81e38727673c7f428b4358ed1e45b042e;p=pakfire.git archive: Keep filelist when extracting files Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index f93963471..8a1aa8fe1 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -854,6 +854,7 @@ PAKFIRE_EXPORT int pakfire_archive_extract(PakfireArchive archive, const char* p struct archive* a = NULL; struct archive* payload = NULL; struct archive* writer = NULL; + int r; // Use default path if nothing is set if (!prefix) @@ -861,10 +862,17 @@ PAKFIRE_EXPORT int pakfire_archive_extract(PakfireArchive archive, const char* p DEBUG(archive->pakfire, "Extracting %s to %s\n", archive->path, prefix); + // Create a filelist + if (!archive->filelist) { + r = pakfire_filelist_create(&archive->filelist, archive->pakfire); + if (r) + goto ERROR; + } + // Open the archive - int r = archive_open(archive, &a); + r = archive_open(archive, &a); if (r) - return r; + goto ERROR; // Open payload payload = pakfire_archive_open_payload(archive, a); @@ -877,8 +885,9 @@ PAKFIRE_EXPORT int pakfire_archive_extract(PakfireArchive archive, const char* p goto ERROR; struct pakfire_archive_extractor extractor = { - .writer = writer, - .prefix = prefix, + .writer = writer, + .prefix = prefix, + .filelist = archive->filelist, }; // Extract everything @@ -886,6 +895,12 @@ PAKFIRE_EXPORT int pakfire_archive_extract(PakfireArchive archive, const char* p pakfire_archive_extract_entry, &extractor); ERROR: + // Destroy the filelist on error + if (r) { + pakfire_filelist_unref(archive->filelist); + archive->filelist = NULL; + } + if (writer) archive_write_free(writer); if (payload)