GNU bug report logs -
#8374
cp -a [-l] sometimes does not preserve timestamps of symlinks
Previous Next
Full log
Message #20 received at 8374 <at> debbugs.gnu.org (full text, mbox):
Pádraig Brady wrote:
...
>> Hmm it looks now like we're creating symlinks (with wrong timestamps),
>> but in fact we should be creating hardlinks to symlinks.
>>
>> This seems to have been changed with:
>> http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commit;h=3346c0af
>
> That commit didn't actually change the logic as far as I can see.
> It was actually ca9e212c that introduced the logic bug I think.
>
> So I'm going to apply the attached.
...
> Subject: [PATCH] copy: link rather than copy symlinks, when --link used
>
> This bug was introduced in commit ca9e212c, 2009-09-24,
> "cp, mv: use linkat to guarantee semantics", which
> inadvertently disabled the creation of hardlinks to symlinks.
> However rather than implementing the intention of that commit
> and relying on gnulib linkat emulation, we'll revert to the
> previous emulation as that maintains ownership and timestamps.
>
> * src/copy.c (copy_internal): Use our existing hardlink to
> symlink emulation when we're not sure that link() will
> not dereference the symlink. Also ensure that we copy the
How about "...when link() might dereference..."
> timestamps of the original symlink when we use the emulation.
> * tests/cp/link-symlink: Add a test to ensure timestamps copied.
> * tests/Makefile.am: Reference the new test.
> * NEWS: Mention the fix.
> Reported by Ruediger Meier
> ---
> NEWS | 4 ++++
> src/copy.c | 27 ++++++++++++++++++++-------
> tests/Makefile.am | 1 +
> tests/cp/link-symlink | 41 +++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 66 insertions(+), 7 deletions(-)
> create mode 100755 tests/cp/link-symlink
>
> diff --git a/NEWS b/NEWS
> index 6d66355..f25a696 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -20,6 +20,10 @@ GNU coreutils NEWS -*- outline -*-
> wc would dereference a NULL pointer upon an early out-of-memory error
> [bug introduced in coreutils-7.1]
>
> + cp -a --link would not create a hardlink to a symlink, instead
> + copying the symlink and then not preserving its timestamp.
> + [bug introduced in coreutils-8.0]
Please move that "up" so they're alphabetized.
> dd now accepts the 'nocache' flag to the iflag and oflag options,
> diff --git a/src/copy.c b/src/copy.c
Thanks for fixing that!
This bug report was last modified 14 years and 55 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.