Hi folks, Versions of coreutils cp from 9.1-9.5 have been failing with error message:
"cp: cannot create regular file '/tmp/b/c': File exists" to overwrite existing files even with -f under Cygwin.I have been trying to run down how and where cp is missing a check that the file exists by tracing and with gdb without anything obvious grabbing my attention and raising suspicions.
Any advice for changing my approach, or where specifically to concentrate, could be helpful in progressing a new release.
A couple of Cygwin specific patches have been applied over many releases with rebases to root inode handling and allowing case insensitivity that do not appear to have had any other effect on the flow or operations.
-- Take care. Thanks, Brian Inglis Calgary, Alberta, Canada La perfection est atteinte Perfection is achieved non pas lorsqu'il n'y a plus rien à ajouter not when there is no more to add mais lorsqu'il n'y a plus rien à retirer but when there is no more to cut -- Antoine de Saint-Exupéry
#!/bin/sh # cp-9.1-fails-file-exists.sh #set -vx days=7 ver=9.1 ls_opt=-glo rc=0 tmp=${TMPDIR:-${TMP:_${TEMP:-/tmp}}} bin=coreutils-$ver-1.$(arch)/inst/usr/bin for d in $tmp $bin do [ ! -d $d/ ] && echo "${0##*/}: $d: not found" >&2 && rc=2 done [ 0 -eq $rc ] || exit $rc export PATH="$PWD/$bin:$PATH" for u in cp echo ls mkdir rm tee touch do if [ ! -s $bin/$u ] || [ ! -x $bin/$u ] then echo "${0##*/}: $u: not found" >&2 && rc=2 fi done [ 0 -eq $rc ] || exit $rc for dir in a b do rm -fr $tmp/$dir/* mkdir -p $tmp/$dir/ for f in c # dd eee f.fff gg.ggg hhh.hhh iiiiiii jjjjjjjj kkkkkkkkk do echo $f > $tmp/$dir/$f done days=$(($days+7)) done for f in 0 y do echo $f > $tmp/a/$f done for f in 1 z do echo $f > $tmp/b/$f done ls $ls_opt $tmp/a/ $tmp/b/ for cp in $bin/cp /bin/cp do for f in $tmp/a/* do for p in "echo run:" command strace do [ "strace" = "$p" ] && o=" -o cp-${f##*/}.strace" || o='' $p$o $cp -fv $tmp/a/* $tmp/b/ [ 0 -eq $? ] && [ "command" = "$p" ] && break done done ls $ls_opt $tmp/b/ done
/tmp/a/: total 3 -rw-r--r-- 1 2 Oct 18 10:26 0 -rw-r--r-- 1 2 Oct 18 10:26 c -rw-r--r-- 1 2 Oct 18 10:26 y /tmp/b/: total 3 -rw-r--r-- 1 2 Oct 18 10:26 1 -rw-r--r-- 1 2 Oct 18 10:26 c -rw-r--r-- 1 2 Oct 18 10:26 z run: coreutils-9.1-1.x86_64/inst/usr/bin/cp -fv /tmp/a/0 /tmp/a/c /tmp/a/y /tmp/b/ '/tmp/a/0' -> '/tmp/b/0' '/tmp/a/c' -> '/tmp/b/c' coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/c': File exists '/tmp/a/y' -> '/tmp/b/y' '/tmp/a/0' -> '/tmp/b/0' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/0': File exists '/tmp/a/c' -> '/tmp/b/c' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/c': File exists '/tmp/a/y' -> '/tmp/b/y' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/y': File exists run: coreutils-9.1-1.x86_64/inst/usr/bin/cp -fv /tmp/a/0 /tmp/a/c /tmp/a/y /tmp/b/ '/tmp/a/0' -> '/tmp/b/0' coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/0': File exists '/tmp/a/c' -> '/tmp/b/c' coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/c': File exists '/tmp/a/y' -> '/tmp/b/y' coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/y': File exists '/tmp/a/0' -> '/tmp/b/0' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/0': File exists '/tmp/a/c' -> '/tmp/b/c' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/c': File exists '/tmp/a/y' -> '/tmp/b/y' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/y': File exists run: coreutils-9.1-1.x86_64/inst/usr/bin/cp -fv /tmp/a/0 /tmp/a/c /tmp/a/y /tmp/b/ '/tmp/a/0' -> '/tmp/b/0' coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/0': File exists '/tmp/a/c' -> '/tmp/b/c' coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/c': File exists '/tmp/a/y' -> '/tmp/b/y' coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/y': File exists '/tmp/a/0' -> '/tmp/b/0' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/0': File exists '/tmp/a/c' -> '/tmp/b/c' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/c': File exists '/tmp/a/y' -> '/tmp/b/y' /usr/src/coreutils/coreutils-9.1-1.x86_64/inst/usr/bin/cp: cannot create regular file '/tmp/b/y': File exists total 5 -rw-r--r-- 1 2 Oct 18 10:26 0 -rw-r--r-- 1 2 Oct 18 10:26 1 -rw-r--r-- 1 2 Oct 18 10:26 c -rw-r--r-- 1 2 Oct 18 10:26 y -rw-r--r-- 1 2 Oct 18 10:26 z run: /bin/cp -fv /tmp/a/0 /tmp/a/c /tmp/a/y /tmp/b/ '/tmp/a/0' -> '/tmp/b/0' '/tmp/a/c' -> '/tmp/b/c' '/tmp/a/y' -> '/tmp/b/y' run: /bin/cp -fv /tmp/a/0 /tmp/a/c /tmp/a/y /tmp/b/ '/tmp/a/0' -> '/tmp/b/0' '/tmp/a/c' -> '/tmp/b/c' '/tmp/a/y' -> '/tmp/b/y' run: /bin/cp -fv /tmp/a/0 /tmp/a/c /tmp/a/y /tmp/b/ '/tmp/a/0' -> '/tmp/b/0' '/tmp/a/c' -> '/tmp/b/c' '/tmp/a/y' -> '/tmp/b/y' total 5 -rw-r--r-- 1 2 Oct 18 10:26 0 -rw-r--r-- 1 2 Oct 18 10:26 1 -rw-r--r-- 1 2 Oct 18 10:26 c -rw-r--r-- 1 2 Oct 18 10:26 y -rw-r--r-- 1 2 Oct 18 10:26 z