[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#15173: [PATCH] cp: with --link always use linkat() if available
From: |
Pádraig Brady |
Subject: |
bug#15173: [PATCH] cp: with --link always use linkat() if available |
Date: |
Thu, 12 Dec 2013 18:44:15 +0000 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130110 Thunderbird/17.0.2 |
On 12/09/2013 02:24 AM, Pádraig Brady wrote:
> Sorry if you get multiple copies of this.
>
> The test for this is failing on solaris 10 (NFS)
> It does seem that hardlinks to symlinks are supported:
>
> $ touch tfile
> $ ln -s tfile tlink
> $ src/ln -L tlink tlink-ln-L
> $ src/ln -P tlink tlink-ln-P
> $ src/ln tlink tlink-ln
> $ ls -li tfile tlink*
> 8550 -rw-r--r-- 3 padraig csw 0 Dec 9 01:18 tfile
> 8551 lrwxrwxrwx 2 padraig csw 5 Dec 9 01:19 tlink ->
> tfile
> 8550 -rw-r--r-- 3 padraig csw 0 Dec 9 01:18 tlink-ln
> 8550 -rw-r--r-- 3 padraig csw 0 Dec 9 01:18 tlink-ln-L
> 8551 lrwxrwxrwx 2 padraig csw 5 Dec 9 01:19 tlink-ln-P
> -> tfile
>
> But we have linkat() emulation in place I think:
>
> $ grep LINK lib/config.h
...
> /* #undef HAVE_LINKAT */
> #define LINK_FOLLOWS_SYMLINKS -1
> FAIL: tests/cp/link-deref
> =========================
> --- exp Mon Dec 9 01:00:08 2013
> +++ out Mon Dec 9 01:00:08 2013
> @@ -1,1 +1,1 @@
> -cp --link -P dirlink dst|result=0|inode=8436|type=symbolic link|error=
> +cp --link -P dirlink dst|result=0|inode=8467|type=symbolic link|error=
> + rm -f diff.out
> + false
> + ls -lid dirlink dir dst
> 8434 drwxr-xr-x 2 padraig csw 2 Dec 9 01:00 dir
> 8436 lrwxrwxrwx 1 padraig csw 3 Dec 9 01:00 dirlink -> dir
> 8467 lrwxrwxrwx 1 padraig csw 3 Dec 9 01:00 dst -> dir
> + fail=1
So the attached should address this on FreeBSD ast least
where we HAVE_LINKAT so don't need to fallback to
the symlink -> symlink emulation in copy.c
For the above case we'll need to skip parts of the test I think,
depending on the above 2 config vars.
thanks,
Pádraig
cp-linkat.patch
Description: Text Data