]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Refactor opening the archive
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Apr 2021 09:35:08 +0000 (09:35 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Apr 2021 09:35:08 +0000 (09:35 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index affd549d52f2ef21a3e1f62ab933ae89a434e924..6c761a90ad6e6486f54a7808d0f6c4e2ead8f843 100644 (file)
@@ -110,20 +110,23 @@ static void configure_archive(struct archive* a) {
 
 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) {