From: Paul Eggert Date: Mon, 22 Nov 2010 02:50:41 +0000 (-0800) Subject: cp: give a better diagnostic for nonexistent dest/ X-Git-Tag: v8.8~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=013d95af11f41cbe05abdb73c997040dce4301f8;p=thirdparty%2Fcoreutils.git cp: give a better diagnostic for nonexistent dest/ This patch was written by Jim Meyering and myself. * src/copy.c (copy_reg): Turn EISDIR to ENOTDIR to improve the quality of diagnostics for commands like "cp a nosuch/". Reported by Марк Коренберг and Alan Curry in the thread starting at: http://lists.gnu.org/archive/html/bug-coreutils/2010-11/msg00178.html * THANKS: Update. * tests/mv/trailing-slash: Add a test. --- diff --git a/THANKS b/THANKS index 0123c32662..9bd78c889c 100644 --- a/THANKS +++ b/THANKS @@ -362,6 +362,7 @@ M. P. Suzuki mpsuzuki@hiroshima-u.ac.jp Maciej Kwapulinski pikpok@univ.gda.pl Manas Garg manas@cygsoft.com Manfred Hollstein manfred@s-direktnet.de +Марк Коренберг socketpair@gmail.com Marc Boucher marc@mbsi.ca Marc Haber mh+debian-bugs@zugschlus.de Marc Lehman schmorp@schmorp.de diff --git a/src/copy.c b/src/copy.c index 07501dfd4c..42d6d92498 100644 --- a/src/copy.c +++ b/src/copy.c @@ -603,6 +603,12 @@ copy_reg (char const *src_name, char const *dst_name, } } } + + /* Improve quality of diagnostic when a nonexistent dst_name + ends in a slash and open fails with errno == EISDIR. */ + if (dest_desc < 0 && dest_errno == EISDIR + && *dst_name && dst_name[strlen (dst_name) - 1] == '/') + dest_errno = ENOTDIR; } else omitted_permissions = 0; diff --git a/tests/mv/trailing-slash b/tests/mv/trailing-slash index b58c90822a..906174afaa 100755 --- a/tests/mv/trailing-slash +++ b/tests/mv/trailing-slash @@ -50,4 +50,12 @@ done #touch a a2 #mv a a2/ && fail=1 +# Test for a cp-specific diagnostic introduced after coreutils-8.7: +printf '%s\n' \ + "cp: cannot create regular file \`no-such/': Not a directory" \ +> expected-err +touch b +cp b no-such/ 2> err && fail=1 +compare err expected-err || fail=1 + Exit $fail