// States
unsigned int in_free:1;
- // Disk Reader/Writer
- struct archive* reader;
+ // Disk Writer
struct archive* writer;
};
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)
}
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;
}