From: Michael Tremer Date: Wed, 7 Apr 2021 16:55:56 +0000 (+0000) Subject: archive: Refactor pakfire_archive_extract X-Git-Tag: 0.9.28~1285^2~395 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52adc63f07fd867525efc50c1c7c59497ae1b69b;p=pakfire.git archive: Refactor pakfire_archive_extract Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index b7fa3ffd7..8b133165e 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -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;