Don't try to hardlink directories. While I'm here, expand some

comments to make this section of code a little clearer.
This commit is contained in:
Tim Kientzle 2008-07-01 05:45:03 +00:00
parent a9f1ad5de1
commit 77f719e605

View File

@ -535,16 +535,23 @@ entry_to_archive(struct cpio *cpio, struct archive_entry *entry)
fprintf(stderr,"%s", destpath);
/*
* Obviously, this only gets invoked in pass mode.
* Obviously, this only gets invoked in pass mode, since
* option_link is nonsense otherwise. Note that we can't
* hardlink dirs, and that if a link operation fails (because
* of cross-device restrictions), we'll fall back to copy mode
* for that entry.
*/
if (cpio->option_link) {
if (cpio->option_link
&& archive_entry_filetype(entry) != AE_IFDIR)
{
struct archive_entry *t;
/* Save the original entry in case we need it later. */
t = archive_entry_clone(entry);
if (t == NULL)
cpio_errc(1, ENOMEM, "Can't create link");
/* Note: link(2) doesn't create parent directories,
* so we use archive_write_header() instead. */
* so we use archive_write_header() instead as a
* convenience. */
archive_entry_set_hardlink(t, srcpath);
/* This is a straight link that carries no data. */
archive_entry_set_size(t, 0);