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;