]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: archive: Implement extracting hardlinks
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 11 Jun 2019 03:45:12 +0000 (04:45 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 11 Jun 2019 03:45:12 +0000 (04:45 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index bc6783bcefaa738adefe9774fe031c4197dcf2ec..d1eef79dd02766605581f388b41aedc9a5ff9583 100644 (file)
@@ -616,6 +616,17 @@ static int archive_extract(Pakfire pakfire, struct archive* a, const char* prefi
                DEBUG(pakfire, "Extracting %s (%zu bytes)\n", pathname, size);
                pakfire_free(pathname);
 
+               // Update hardlink targets
+               const char* hardlink = archive_entry_hardlink(entry);
+               if (hardlink) {
+                       // Make new hardlink target relative to prefix
+                       char* h = pakfire_path_join(prefix, hardlink);
+
+                       // Update the entry
+                       archive_entry_set_hardlink(entry, h);
+                       pakfire_free(h);
+               }
+
                // Create file
                r = archive_write_header(ext, entry);
                if (r != ARCHIVE_OK) {