]> git.ipfire.org Git - pakfire.git/commitdiff
pakfire: Don't make the reader sticky
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 25 Oct 2024 12:40:11 +0000 (12:40 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 25 Oct 2024 12:40:11 +0000 (12:40 +0000)
This totally goes wrong when we want to dist a source package while the
filelist is scanning for source files. Oh well. This isn't too bad.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/filelist.c
src/libpakfire/packager.c
src/libpakfire/pakfire.c

index 5663fd9065580353cc85fd70294a052ae02d17b5..166939c4e37453d1745004cfbe31484a4f16457c 100644 (file)
@@ -409,6 +409,9 @@ int pakfire_filelist_scan(struct pakfire_filelist* list, const char* root,
        }
 
 ERROR:
+       if (reader)
+               archive_read_free(reader);
+
        return r;
 }
 
index e1998c7a88dada30ded75833a546bec85a7eb52f..e4ffdfcc24043966d9b5350a55620449d824dfcc 100644 (file)
@@ -70,6 +70,9 @@ struct pakfire_packager {
 };
 
 static void pakfire_packager_free(struct pakfire_packager* packager) {
+       if (packager->reader)
+               archive_read_free(packager->reader);
+
        // Scriptlets
        if (packager->scriptlets) {
                for (unsigned int i = 0; i < packager->num_scriptlets; i++)
index 36a70a9be84633988d5a817d3887ec5b69f1f9dc..fc15ada4ce3ca02e6b8cb6d26141ec59b432e5a8 100644 (file)
@@ -118,8 +118,7 @@ struct pakfire {
        // States
        unsigned int in_free:1;
 
-       // Disk Reader/Writer
-       struct archive* reader;
+       // Disk Writer
        struct archive* writer;
 };
 
@@ -428,8 +427,6 @@ static void pakfire_free(struct pakfire* pakfire) {
 
        if (pakfire->pool)
                pool_free(pakfire->pool);
-       if (pakfire->reader)
-               archive_read_free(pakfire->reader);
        if (pakfire->writer)
                archive_write_free(pakfire->writer);
        if (pakfire->config)
@@ -1598,36 +1595,33 @@ static const char* pakfire_group_lookup(void* data, la_int64_t gid) {
 }
 
 struct archive* pakfire_get_disk_reader(struct pakfire* pakfire) {
+       struct archive* reader = NULL;
        int r;
 
-       if (!pakfire->reader) {
-               // Create a new reader
-               pakfire->reader = archive_read_disk_new();
-               if (!pakfire->reader) {
-                       CTX_ERROR(pakfire->ctx, "Could not set up reader: %m\n");
-                       return NULL;
-               }
-
-               // Do not read fflags
-               r = archive_read_disk_set_behavior(pakfire->reader, ARCHIVE_READDISK_NO_FFLAGS);
-               if (r) {
-                       CTX_ERROR(pakfire->ctx, "Could not change behavior of reader: %s\n",
-                               archive_error_string(pakfire->reader));
-                       goto ERROR;
-               }
+       // Create a new reader
+       reader = archive_read_disk_new();
+       if (!reader) {
+               CTX_ERROR(pakfire->ctx, "Could not set up reader: %m\n");
+               return NULL;
+       }
 
-               // Install user/group lookups
-               archive_read_disk_set_uname_lookup(pakfire->reader, pakfire, pakfire_user_lookup, NULL);
-               archive_read_disk_set_gname_lookup(pakfire->reader, pakfire, pakfire_group_lookup, NULL);
+       // Do not read fflags
+       r = archive_read_disk_set_behavior(reader, ARCHIVE_READDISK_NO_FFLAGS);
+       if (r) {
+               CTX_ERROR(pakfire->ctx, "Could not change behavior of reader: %s\n",
+                       archive_error_string(reader));
+               goto ERROR;
        }
 
-       return pakfire->reader;
+       // Install user/group lookups
+       archive_read_disk_set_uname_lookup(reader, pakfire, pakfire_user_lookup, NULL);
+       archive_read_disk_set_gname_lookup(reader, pakfire, pakfire_group_lookup, NULL);
+
+       return reader;
 
 ERROR:
-       if (pakfire->reader) {
-               archive_read_free(pakfire->reader);
-               pakfire->reader = NULL;
-       }
+       if (reader)
+               archive_read_free(reader);
 
        return NULL;
 }