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;
}
// 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;
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) {
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) {
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;
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;
}