From: Tim Kientzle Date: Mon, 30 Jun 2008 22:42:49 +0000 (-0400) Subject: Don't try to hardlink dirs for -pl; this always fails X-Git-Tag: v2.6.0~147 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fd950989e54fd628ffe1c82fe4672e377e6bcb8f;p=thirdparty%2Flibarchive.git Don't try to hardlink dirs for -pl; this always fails and generated an annoying warning for every directory. SVN-Revision: 145 --- diff --git a/cpio/cpio.c b/cpio/cpio.c index a92cd3e86..515e9921d 100644 --- a/cpio/cpio.c +++ b/cpio/cpio.c @@ -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); archive_entry_set_size(t, 0); r = archive_write_header(cpio->archive, t);