static int archive_open(PakfireArchive archive, struct archive** a) {
*a = archive_read_new();
- configure_archive(*a);
-
- if (archive_read_open_filename(*a, archive->path, BLOCKSIZE) == ARCHIVE_OK) {
- return 0;
- }
+ if (!*a)
+ return ENOMEM;
- // Log error message
- const char* error = archive_error_string(*a);
- DEBUG(archive->pakfire, "Could not open archive: %s\n", error);
+ // All packages must be uncompressed tar balls
+ archive_read_support_format_tar(*a);
- archive_read_free(*a);
- *a = NULL;
+ // Try opening the archive file
+ int r = archive_read_open_filename(*a, archive->path, 8192);
+ if (r) {
+ ERROR(archive->pakfire, "Could not open archive %s: %s\n",
+ archive->path, archive_error_string(*a));
+ archive_read_free(*a);
+ *a = NULL;
+ return r;
+ }
- return -1;
+ return 0;
}
static void archive_close(struct archive* a) {