]> git.ipfire.org Git - pakfire.git/commitdiff
compress: Add option to collect all extracted files
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 23 Aug 2022 14:39:58 +0000 (14:39 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 23 Aug 2022 14:39:58 +0000 (14:39 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/compress.c
src/libpakfire/include/pakfire/compress.h

index 0eeb8b32b00fad24a04c3947e2c57e11e733139f..81f7a8316620ef67d46513039a88bcc14b566a13 100644 (file)
@@ -28,6 +28,8 @@
 #include <zstd.h>
 
 #include <pakfire/compress.h>
+#include <pakfire/file.h>
+#include <pakfire/filelist.h>
 #include <pakfire/logging.h>
 #include <pakfire/progressbar.h>
 #include <pakfire/util.h>
@@ -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;
        }
index 1bb24679ee09e7fa58b3daef7b9765e6ddf42148..de5c9a6488b94d672b3dcfac8515abd972bfc62f 100644 (file)
@@ -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