fclose(packager->fpayload);
if (packager->reader)
- archive_free(packager->reader);
+ archive_read_free(packager->reader);
pakfire_filelist_unref(packager->filelist);
pakfire_package_unref(packager->pkg);
pakfire_unref(packager->pakfire);
}
-static const char* pakfire_packager_user_lookup(void* data, la_int64_t uid) {
- Pakfire pakfire = (Pakfire)data;
-
- // Fast path for "root"
- if (uid == 0)
- return "root";
-
- // Find a matching entry in /etc/passwd
- struct passwd* entry = pakfire_getpwuid(pakfire, uid);
- if (!entry) {
- ERROR(pakfire, "Could not retrieve uname for %ld: %s\n", uid, strerror(errno));
- return 0;
- }
-
- DEBUG(pakfire, "Mapping UID %ld to %s\n", uid, entry->pw_name);
-
- return entry->pw_name;
-}
-
-static const char* pakfire_packager_group_lookup(void* data, la_int64_t gid) {
- Pakfire pakfire = (Pakfire)data;
-
- // Fast path for "root"
- if (gid == 0)
- return "root";
-
- // Find a matching entry in /etc/group
- struct group* entry = pakfire_getgrgid(pakfire, gid);
- if (!entry) {
- ERROR(pakfire, "Could not retrieve gname for %ld: %s\n", gid, strerror(errno));
- return 0;
- }
-
- DEBUG(pakfire, "Mapping GID %ld to %s\n", gid, entry->gr_name);
-
- return entry->gr_name;
-}
-
-static int pakfire_packager_create_reader(struct pakfire_packager* p) {
- // Open a reader
- p->reader = archive_read_disk_new();
- if (!p->reader) {
- ERROR(p->pakfire, "archive_read_disk_new() failed\n");
- return 1;
- }
-
- // Do not read fflags
- int r = archive_read_disk_set_behavior(p->reader, ARCHIVE_READDISK_NO_FFLAGS);
- if (r) {
- ERROR(p->pakfire, "Could not change behavior of reader: %s\n",
- archive_error_string(p->reader));
- return 1;
- }
-
- // Install our own routine for user/group lookups
- archive_read_disk_set_uname_lookup(p->reader, p->pakfire,
- pakfire_packager_user_lookup, NULL);
- archive_read_disk_set_gname_lookup(p->reader, p->pakfire,
- pakfire_packager_group_lookup, NULL);
-
- return 0;
-}
-
PAKFIRE_EXPORT int pakfire_packager_create(struct pakfire_packager** packager,
PakfirePackage pkg) {
struct pakfire_packager* p = calloc(1, sizeof(*p));
goto ERROR;
// Create reader
- r = pakfire_packager_create_reader(p);
- if (r)
+ p->reader = pakfire_make_archive_disk_reader(p->pakfire, 1);
+ if (!p->reader)
goto ERROR;
// Start payload