]> git.ipfire.org Git - pakfire.git/commitdiff
packager: Use common reader
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 24 Mar 2021 10:51:19 +0000 (10:51 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 24 Mar 2021 10:51:19 +0000 (10:51 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/packager.c

index 8c43c113b1dcc725565010eed79636c9c3801a70..61e3d9567267dc98cdb928fb12dd14aa63c4beea 100644 (file)
@@ -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