A helper function to close the archive and reset our data structures
*/
static void close_archive(struct pakfire_archive* archive, struct archive* a) {
- archive_read_free(a);
+ if (a)
+ archive_read_free(a);
// Rewind the file descriptor
rewind(archive->f);
static struct archive* pakfire_archive_open_payload(struct pakfire_archive* archive,
struct archive** a, size_t* size) {
struct archive_entry* entry = NULL;
+ struct archive* payload = NULL;
// Find the payload
int r = open_archive_and_find(archive, a, &entry, "DATA");
if (r)
- return NULL;
+ goto ERROR;
// Store size
if (size)
*size = archive_entry_size(entry);
// Allocate a new archive object
- struct archive* payload = archive_read_new();
+ payload = archive_read_new();
if (!payload)
- return NULL;
+ goto ERROR;
// All of our packages are tar balls
archive_read_support_format_tar(payload);
return payload;
ERROR:
- archive_read_free(payload);
- close_archive(archive, *a);
- *a = NULL;
+ if (payload)
+ archive_read_free(payload);
return NULL;
}
archive_write_free(writer);
if (payload)
archive_read_free(payload);
- close_archive(archive, a);
+ if (a)
+ close_archive(archive, a);
return r;
}