From: Michael Tremer Date: Wed, 24 Mar 2021 10:51:19 +0000 (+0000) Subject: packager: Use common reader X-Git-Tag: 0.9.28~1285^2~478 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6681706256623175eddbbd79e790c120c30700e2;p=pakfire.git packager: Use common reader Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index 8c43c113b..61e3d9567 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -130,76 +130,13 @@ static void pakfire_packager_free(struct pakfire_packager* packager) { 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)); @@ -224,8 +161,8 @@ PAKFIRE_EXPORT int pakfire_packager_create(struct pakfire_packager** packager, 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