struct archive* a = NULL;
struct archive* payload = NULL;
struct archive* writer = NULL;
+ int r;
// Use default path if nothing is set
if (!prefix)
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);
goto ERROR;
struct pakfire_archive_extractor extractor = {
- .writer = writer,
- .prefix = prefix,
+ .writer = writer,
+ .prefix = prefix,
+ .filelist = archive->filelist,
};
// Extract everything
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)