From 9ebf15eedfd4ead9456e34e9f31f6848462b21ce Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 8 Feb 2025 10:59:31 +0000 Subject: [PATCH] archive writer: Setup the link resolver Signed-off-by: Michael Tremer --- src/pakfire/archive_writer.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/pakfire/archive_writer.c b/src/pakfire/archive_writer.c index 2e3fdf83..e0f1e920 100644 --- a/src/pakfire/archive_writer.c +++ b/src/pakfire/archive_writer.c @@ -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; -- 2.39.5