From: Michael Tremer Date: Fri, 25 Oct 2024 12:40:11 +0000 (+0000) Subject: pakfire: Don't make the reader sticky X-Git-Tag: 0.9.30~897 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8d1babb3cdccd8ba599f3f661f0cd4dcf35d3659;p=pakfire.git pakfire: Don't make the reader sticky 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 --- diff --git a/src/libpakfire/filelist.c b/src/libpakfire/filelist.c index 5663fd906..166939c4e 100644 --- a/src/libpakfire/filelist.c +++ b/src/libpakfire/filelist.c @@ -409,6 +409,9 @@ int pakfire_filelist_scan(struct pakfire_filelist* list, const char* root, } ERROR: + if (reader) + archive_read_free(reader); + return r; } diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index e1998c7a8..e4ffdfcc2 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -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++) diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 36a70a9be..fc15ada4c 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -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; }