GNU bug report logs -
#62607
cp --recursive --backup broken in 9.2
Previous Next
Full log
Message #11 received at 62607 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
On 02/04/2023 13:40, Pádraig Brady wrote:
> On 01/04/2023 23:40, Kristian Klausen via GNU coreutils Bug Reports wrote:
>> Hi
>>
>> After upgrading to coreutils 9.2-2 on Arch Linux the following:
>> mkdir -p src dst
>> touch {src,dst}/bar
>> cp --recursive --backup src/* dst
>> fails with:
>> cp: cannot create regular file 'dst/foo/bar': File exists
>>
>> Running strace on cp I noticed:
>> renameat2(4, "foo/bar", 4, "foo/bar~", 0) = -1 ENOENT (No such file or
>> directory)
>>
>> In coreutils 9.1-3 the syscall succeeds:
>> renameat2(4, "bar", 4, "bar~", 0) = 0
>>
>> I assume renameat2 is called with the wrong oldpath and newpath in 9.2
>> and that it should just be the basename and not the full relative path.
>>
>> Cheers
>> Kristian Klausen
>
> Your analysis is correct wrt the wrong paths being given to the renameat2().
> This is related to https://bugs.gnu.org/55029
>
> For completeness the correct repro is:
>
> mkdir -p {src,dst}/foo
> touch {src,dst}/foo/bar
> cp --recursive --backup src/* dst
The attached two patches should address this.
The first fixes the bug in gnulib (cc'd),
while the second adds a test to coreutils.
thanks,
Pádraig
[gnulib-backupfile-62607.patch (text/x-patch, attachment)]
[coreutils-backup-62607.patch (text/x-patch, attachment)]
This bug report was last modified 2 years and 112 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.