cp -up: preserve all hard links
commitf28a09810b7dc11261cb43e2a09726caf9a993b7
authorJim Meyering <meyering@redhat.com>
Mon, 25 Jul 2011 09:31:01 +0000 (25 11:31 +0200)
committerJim Meyering <meyering@redhat.com>
Mon, 25 Jul 2011 12:15:44 +0000 (25 14:15 +0200)
tree5fd2afa981e816f28eaa8aba4a189620a032abfe
parentaeb5222a6d7f7e9be5b737e2dbaf71185a9946db
cp -up: preserve all hard links

* src/copy.c (copy_internal): With --update (-u), this function would
return early once it found that the destination is not older than the
source, *without* recording the source-dev/ino--to--dest_name mapping.
That mapping is required in order to preserve src hard links in the
destination tree, so when using cp with --update and --preserve=links
(perhaps via -p or -a), cp could fail to preserve one hard link
per inode when at least one of the hard-linked names already exists
in the destination tree.
Reported by Odd Harry Mannsverk in http://debbugs.gnu.org/8419.
* tests/cp/preserve-link: New file.  Exercise the flaw/fix.
* tests/Makefile.am (TESTS): Add it.
* NEWS (Bug fixes): Mention it.
NEWS
src/copy.c
tests/Makefile.am
tests/cp/preserve-link [new file with mode: 0755]