]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Refactor pakfire_archive_extract
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Apr 2021 16:55:56 +0000 (16:55 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Apr 2021 16:55:56 +0000 (16:55 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index b7fa3ffd73c0a78b86ef616962bf8d23e034e8f1..8b133165e5a0b4bc63a0e0d2fc6cc1ba26a86c2a 100644 (file)
@@ -846,25 +846,32 @@ PAKFIRE_EXPORT char* pakfire_archive_extraction_path(PakfireArchive archive, con
 
 PAKFIRE_EXPORT int pakfire_archive_extract(PakfireArchive archive, const char* prefix, int flags) {
        struct archive* a;
-       struct archive* pa = NULL;
+       struct archive* payload = NULL;
 
-       int r = archive_open(archive, &a);
-       if (r)
-               return 1;
-
-       int use_payload = (flags & PAKFIRE_ARCHIVE_USE_PAYLOAD);
+       // Use default path if nothing is set
+       if (!prefix)
+               prefix = pakfire_get_path(archive->pakfire);
 
        DEBUG(archive->pakfire, "Extracting %s to %s\n", archive->path, prefix);
 
-       if (use_payload)
-               pa = pakfire_archive_open_payload(archive, a);
+       // Open the archive
+       int r = archive_open(archive, &a);
+       if (r)
+               return r;
 
-       r = archive_extract(archive, use_payload ? pa : a,
-               prefix ? prefix : pakfire_get_path(archive->pakfire));
+       // Open payload if requested
+       if (flags & PAKFIRE_ARCHIVE_USE_PAYLOAD) {
+               payload = pakfire_archive_open_payload(archive, a);
+               if (!payload)
+                       goto ERROR;
+       }
 
-       if (pa)
-               archive_read_free(pa);
+       // Extract everything
+       r = archive_extract(archive, (payload) ? payload : a, prefix);
 
+ERROR:
+       if (payload)
+               archive_read_free(payload);
        archive_read_free(a);
 
        return r;