cvs commit: src/lib/libarchive archive_write_disk.c
src/lib/libarchive/test Makefile test_write_disk_hardlink.c
kientzle at FreeBSD.org
Thu Jan 17 21:05:58 PST 2008
kientzle 2008-01-18 05:05:58 UTC
FreeBSD src repository
Issues with hardlinks in newc-format files prompted me to
write a new test to exercise the hardlink strategies used
by different archive formats (tar, old cpio, new cpio).
This uncovered two problems, both fixed by this commit:
1) Enforce file size when writing files to disk.
2) When restoring hardlink entries, if they have data associated, go
ahead and open the file so we can write the data.
In particular, this fixes bsdtar/bsdcpio extraction of new cpio
formats where the "original" is empty and the subsequent "hardlink"
entry actually carries the data. It also provides correct behavior
for old cpio archives where hardlinked entries have their bodies
stored multiple times in the archive; the last body should always be
the one that ends up in the final file. The new pax format also
permits (but does not require) hardlinks to carry file data; again,
the last contents should always win.
Note that with any of these, a size of zero on a hardlink simply means
that the hardlink carries no data; it does not mean that the file has
zero size. A non-zero size on a hardlink does provide the file size.
Thanks to: John Baldwin, for reminding me about this long-standing bug
and sending me a simple example archive that prompted this test case
Revision Changes Path
1.19 +32 -6 src/lib/libarchive/archive_write_disk.c
1.13 +1 -0 src/lib/libarchive/test/Makefile
1.1 +165 -0 src/lib/libarchive/test/test_write_disk_hardlink.c (new)
More information about the cvs-all