]> git.ipfire.org Git - thirdparty/coreutils.git/commit
cp: fix --link regarding the dereferencing of symbolic links
authorGian Piero Carrubba <gpiero@rm-rf.it>
Thu, 7 Nov 2013 22:35:52 +0000 (23:35 +0100)
committerBernhard Voelker <mail@bernhard-voelker.de>
Thu, 7 Nov 2013 22:45:22 +0000 (23:45 +0100)
commitbf6bf52dce37832b03ecfbe1b3a3b104f532df42
treec62463b576c33400b029667a0991367c9da47b7c
parent2c6736f92fc7d2f310714473ea84ceff57e01da2
cp: fix --link regarding the dereferencing of symbolic links

* src/copy.c (create_hard_link): Add a bool 'dereference' parameter,
and pass AT_SYMLINK_FOLLOW as 'flags' to linkat() when dereference
is true.
(should_dereference): Add new 'bool' function to determine if a
file should be dereferenced or not.
(copy_internal): Use the above new should_dereference() and remember
its return value in a new local bool 'dereference' variable.  Use that
in all three calls to create_hard_link().
* src/cp.c (main): after parsing the options, if x.dereference is
still DEFEF_UNDEFINED and the x.recursive is true, then only set
x.dereference to DEREF_NEVER iff --link was not specified.
* doc/coreutils.texi (cp invocation): Mention that cp(1) does not
follow symbolic links in the source when --link is specified.
Likewise in the description of the -R option when used together with
that option.
* tests/cp/same-file.sh: Adapt the expected results for the -fl,
the -bl and the -bfl tests.
* tests/cp/link-deref.sh: Add a new test.
* tests/local.mk (all_tests): Reference the above new test.
* NEWS (Changes in behavior): Mention the change.

This fixes http://bugs.gnu.org/15173

Co-authored-by: Bernhard Voelker <mail@bernhard-voelker.de>
NEWS
doc/coreutils.texi
src/copy.c
src/cp.c
tests/cp/link-deref.sh [new file with mode: 0755]
tests/cp/same-file.sh
tests/local.mk