]> git.ipfire.org Git - pakfire.git/commitdiff
archive writer: Setup the link resolver
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 8 Feb 2025 10:59:31 +0000 (10:59 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 8 Feb 2025 10:59:31 +0000 (10:59 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/archive_writer.c

index 2e3fdf83f20ef3596af46af7cc049ba9f65f0eee..e0f1e9202a758b87a218a4241237308df0b4336d 100644 (file)
@@ -56,6 +56,9 @@ struct pakfire_archive_writer {
 
        // Archive
        struct archive* archive;
+
+       // Resolver for hardlinks
+       struct archive_entry_linkresolver* linkresolver;
 };
 
 /*
@@ -192,7 +195,24 @@ static int pakfire_archive_writer_setup_archive(struct pakfire_archive_writer* s
        return 0;
 }
 
+static int pakfire_archive_writer_setup_linkresolver(struct pakfire_archive_writer* self) {
+       // Setup the link resolver
+       self->linkresolver = archive_entry_linkresolver_new();
+       if (!self->linkresolver) {
+               ERROR(self->ctx, "Could not setup link resolver: %m\n");
+               return -errno;
+       }
+
+       // Set the link resolver strategy
+       archive_entry_linkresolver_set_strategy(
+               self->linkresolver, archive_format(self->archive));
+
+       return 0;
+}
+
 static void pakfire_archive_writer_free(struct pakfire_archive_writer* self) {
+       if (self->linkresolver)
+               archive_entry_linkresolver_free(self->linkresolver);
        if (self->archive)
                archive_write_free(self->archive);
        if (self->pakfire)
@@ -234,6 +254,11 @@ int pakfire_archive_writer_create(struct pakfire_archive_writer** writer,
        if (r < 0)
                goto ERROR;
 
+       // Setup link resolver
+       r = pakfire_archive_writer_setup_linkresolver(self);
+       if (r < 0)
+               goto ERROR;
+
        // Return the pointer
        *writer = self;
        return 0;