# HG changeset patch # User Rob Landley # Date 1206510896 18000 # Node ID a5652aa22f388cd6a466701258c86aade52d66ac # Parent 7d625cbdde25aec8039509aa72bcf11b2d9c57ff Another cp -r fix, another test case... diff -r 7d625cbdde25 -r a5652aa22f38 scripts/test/cp.test --- a/scripts/test/cp.test Tue Mar 25 17:09:40 2008 -0500 +++ b/scripts/test/cp.test Wed Mar 26 00:54:56 2008 -0500 @@ -78,10 +78,12 @@ testing "cp -r /abspath dest" \ "cp -r \"$(readlink -f one)\" dir && diff -r one dir && echo yes" \ "yes\n" "" "" +testing "cp -r dir again" "cp -r one/. dir && diff -r one dir && echo yes" \ + "yes\n" "" "" mkdir dir2 testing "cp -r dir1/* dir2" \ "cp -r one/* dir2 && diff -r one dir2 && echo yes" "yes\n" "" "" -rm -rf one dir2 +rm -rf one dir dir2 # cp -r ../source destdir # cp -r one/two/three missing diff -r 7d625cbdde25 -r a5652aa22f38 toys/cp.c --- a/toys/cp.c Tue Mar 25 17:09:40 2008 -0500 +++ b/toys/cp.c Wed Mar 26 00:54:56 2008 -0500 @@ -69,8 +69,9 @@ // we created. The closest we can do to closing this is make sure // that what we open _is_ a directory rather than something else. - if (mkdir(dst, srcst->st_mode | 0200) || 0>(fdout=open(dst, 0)) - || fstat(fdout, &st2) || !S_ISDIR(st2.st_mode)) + if ((mkdir(dst, srcst->st_mode | 0200) && errno != EEXIST) + || 0>(fdout=open(dst, 0)) || fstat(fdout, &st2) + || !S_ISDIR(st2.st_mode)) { perror_exit("mkdir '%s'", dst); }