diff --git a/bin/cp/cp.c b/bin/cp/cp.c --- a/bin/cp/cp.c +++ b/bin/cp/cp.c @@ -267,7 +267,7 @@ char *recpath = NULL; int atflags, dne, badcp, len, rval; mode_t mask, mode; - bool beneath = type != FILE_TO_FILE; + bool beneath = Rflag && type != FILE_TO_FILE; bool skipdp = false; /* diff --git a/bin/cp/tests/cp_test.sh b/bin/cp/tests/cp_test.sh --- a/bin/cp/tests/cp_test.sh +++ b/bin/cp/tests/cp_test.sh @@ -479,10 +479,15 @@ mkdir bar ln -s baz bar/foo atf_check cp foo bar - atf_check cmp -s foo bar/foo - rm -f bar/foo + atf_check cmp -s foo bar/baz + rm -f bar/foo bar/baz + ln -s baz bar/foo + atf_check cp foo bar/ + atf_check cmp -s foo bar/baz + rm -f bar/foo bar/baz + ln -s $PWD/baz bar/foo atf_check cp foo bar/ - atf_check cmp -s foo bar/foo + atf_check cmp -s foo baz } atf_test_case to_dirlink