]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
copy: Use pre-configured archive readers/writers
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 12 Aug 2022 10:40:51 +0000 (10:40 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 12 Aug 2022 10:40:51 +0000 (10:40 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c
src/libpakfire/include/pakfire/pakfire.h
src/libpakfire/pakfire.c
src/libpakfire/snapshot.c

index ccd81cc6b630b5c735391071afe845e6cf4b141d..5e029ca12e0989d21afdde138cea22378dc2ddaa 100644 (file)
@@ -1012,7 +1012,7 @@ PAKFIRE_EXPORT int pakfire_archive_extract(struct pakfire_archive* archive, cons
                goto ERROR;
 
        // Allocate writer
-       writer = pakfire_make_archive_disk_writer(archive->pakfire);
+       writer = pakfire_make_archive_disk_writer(archive->pakfire, 1);
        if (!writer)
                goto ERROR;
 
index 835bc4705ad3ac83bbc892269ff30ae12bbc2df1..2dcef9aeb5b2826c2aa2d2168b518022219c37ab 100644 (file)
@@ -179,7 +179,7 @@ struct pakfire_repo* pakfire_get_installed_repo(struct pakfire* pakfire);
 
 // Archive helpers
 struct archive* pakfire_make_archive_disk_reader(struct pakfire* pakfire, int internal);
-struct archive* pakfire_make_archive_disk_writer(struct pakfire* pakfire);
+struct archive* pakfire_make_archive_disk_writer(struct pakfire* pakfire, int internal);
 
 // Build Stuff
 int pakfire_build_setup(struct pakfire* pakfire);
index b29d6d7893b08e0fae4d6b4a01044cbcd629b55b..272ca4ace193872b3aff46248a85155632b5f5d7 100644 (file)
@@ -1032,7 +1032,13 @@ PAKFIRE_EXPORT int pakfire_refresh(struct pakfire* pakfire, int flags) {
        return pakfire_foreach_repo(pakfire, pakfire_repo_refresh, flags);
 }
 
-static int pakfire_copy(struct pakfire* pakfire, const char* src, const char* dst) {
+enum pakfire_copy_direction {
+       PAKFIRE_COPY_IN,
+       PAKFIRE_COPY_OUT,
+};
+
+static int pakfire_copy(struct pakfire* pakfire, const char* src, const char* dst,
+               enum pakfire_copy_direction direction) {
        struct archive* reader = NULL;
        struct archive* writer = NULL;
        struct archive_entry* entry = NULL;
@@ -1049,12 +1055,12 @@ static int pakfire_copy(struct pakfire* pakfire, const char* src, const char* ds
        }
 
        // Allocate reader
-       reader = archive_read_disk_new();
+       reader = pakfire_make_archive_disk_reader(pakfire, (direction == PAKFIRE_COPY_OUT));
        if (!reader)
                goto ERROR;
 
        // Allocate writer
-       writer = archive_write_disk_new();
+       writer = pakfire_make_archive_disk_writer(pakfire, (direction == PAKFIRE_COPY_IN));
        if (!writer)
                goto ERROR;
 
@@ -1114,7 +1120,7 @@ PAKFIRE_EXPORT int pakfire_copy_in(struct pakfire* pakfire, const char* src, con
        if (r < 0)
                return 1;
 
-       return pakfire_copy(pakfire, src, path);
+       return pakfire_copy(pakfire, src, path, PAKFIRE_COPY_IN);
 }
 
 PAKFIRE_EXPORT int pakfire_copy_out(struct pakfire* pakfire, const char* src, const char* dst) {
@@ -1128,7 +1134,7 @@ PAKFIRE_EXPORT int pakfire_copy_out(struct pakfire* pakfire, const char* src, co
        if (r < 0)
                return 1;
 
-       return pakfire_copy(pakfire, path, dst);
+       return pakfire_copy(pakfire, path, dst, PAKFIRE_COPY_OUT);
 }
 
 PAKFIRE_EXPORT const char* pakfire_get_arch(struct pakfire* pakfire) {
@@ -1514,7 +1520,7 @@ static la_int64_t pakfire_gid_lookup(void* data, const char* name, la_int64_t ui
        return entry->gr_gid;
 }
 
-struct archive* pakfire_make_archive_disk_writer(struct pakfire* pakfire) {
+struct archive* pakfire_make_archive_disk_writer(struct pakfire* pakfire, int internal) {
        struct archive* archive = archive_write_disk_new();
        if (!archive)
                return NULL;
@@ -1532,8 +1538,12 @@ struct archive* pakfire_make_archive_disk_writer(struct pakfire* pakfire) {
        archive_write_disk_set_options(archive, flags);
 
        // Install our own routine for user/group lookups
-       archive_write_disk_set_user_lookup(archive, pakfire, pakfire_uid_lookup, NULL);
-       archive_write_disk_set_group_lookup(archive, pakfire, pakfire_gid_lookup, NULL);
+       if (internal) {
+               archive_write_disk_set_user_lookup(archive, pakfire, pakfire_uid_lookup, NULL);
+               archive_write_disk_set_group_lookup(archive, pakfire, pakfire_gid_lookup, NULL);
+       } else {
+               archive_write_disk_set_standard_lookup(archive);
+       }
 
        return archive;
 }
index 1a21e1eab6d2ad56766d34bd69c27f519175c577..968b225b3b4c14024ecb298b1ba8572becd2ea5b 100644 (file)
@@ -239,7 +239,7 @@ static int pakfire_snapshot_extract(struct pakfire* pakfire, FILE* f) {
        // And they are compressed using ZSTD
        archive_read_support_filter_zstd(a);
 
-       struct archive* disk = pakfire_make_archive_disk_writer(pakfire);
+       struct archive* disk = pakfire_make_archive_disk_writer(pakfire, 1);
        if (!disk)
                goto ERROR;