public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin@cygwin.com
Subject: Re: Symlink targets dereferenced when winsymlinks:native
Date: Thu, 26 Nov 2015 12:02:00 -0000	[thread overview]
Message-ID: <20151126115339.GK2755@calimero.vinschen.de> (raw)
In-Reply-To: <5654BFC3.9090901@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2722 bytes --]

On Nov 24 20:51, David Macek wrote:
> On 20. 11. 2015 10:26, Corinna Vinschen wrote:
> > On Nov 19 22:17, David Macek wrote:
> >> On 19. 11. 2015 20:36, Nellis, Kenneth wrote:
> >>> FWIW, my results are different:
> >>>
> >>> $ printenv CYGWIN
> >>> winsymlinks:nativestrict
> >>> $ touch XXX
> >>> $ ln -s XXX YYY
> >>> $ ln -s YYY ZZZ
> >>> $ ls -l
> >>> total 0
> >>> -rw-r----- 1 knellis Domain Users 0 Nov 19 14:28 XXX
> >>> lrwxrwxrwx 1 knellis Domain Users 3 Nov 19 14:28 YYY -> XXX
> >>> lrwxrwxrwx 1 knellis Domain Users 3 Nov 19 14:28 ZZZ -> YYY
> >>> $ uname -svr
> >>> CYGWIN_NT-6.1 2.3.1(0.291/5/3) 2015-11-14 12:44
> >>> $
> >>
> >> Weird. I also tried in the virtual root directory, in case cygdrive affects it, but no luck, still absolute paths.
> >>
> >> I'm on Windows 10, if it makes any difference.
> > 
> > No, I'm on W10 either and it works for me as for Kenneth.  The path
> > evaluation in the function creating native symlinks tries to create
> > relative Windows paths if the incoming target path is relative, too.
> > Basically it compares the path prefixes, eliminates as much of
> > the path as possible and prepends "..\\" as required.
> > 
> > I don't see a reason why this shouldn't work for you, unless the
> > shell mangles the paths before passing them to the ln command (yes,
> > this really may happen with some shells depending on settings)
> 
> It seems it's dependent on the directory after all. The shell doesn't seem to affect it, at least not in my tests.
> 
> My test command is `touch 1 && ln -s 1 2`, then I clean up by `rm 1 2`. Now the results:
> 
> in /bin/: relative
> in /: absolute
> in ~/ (/cygdrive/c/Users/username/): relative
> in /cygdrive/w/: absolute
> 
> Note that W: is a permasubst (created using `DOSDevices` in registry), which would explain the different behaviour (but not excuse it :), but I don't see why / is also special. Even if only one from the link pair (target or source) is in a relative-symlink-unsupporting path, I get an absolute path.
> 
> Can you confirm?

Yes, thanks for this part of the analysis.  There was a typo in the
code checking the relative paths.  The check for a drive colon in the
pathname used a wrong offset into the path string, which ultimately
always created an absolut path to the target if the path of the
target was in a drive's root dir or one level below that.

I fixed that in the repo and created a new developer snapshot for
testing: https://cygwin.com/snapshots/  Please give it a try.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2015-11-26 11:53 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-17 22:28 David Macek
2015-11-18 17:55 ` Corinna Vinschen
2015-11-18 18:13   ` David Macek
2015-11-18 19:48     ` Corinna Vinschen
2015-11-18 20:01       ` Warren Young
2015-11-18 20:07         ` Corinna Vinschen
2015-11-19 18:53       ` David Macek
2015-11-19 19:36         ` Nellis, Kenneth
2015-11-19 21:17           ` David Macek
2015-11-20  9:26             ` Corinna Vinschen
2015-11-24 21:48               ` David Macek
2015-11-26 12:02                 ` Corinna Vinschen [this message]
2015-11-29 14:10                   ` David Macek
2015-11-29 17:10                     ` Corinna Vinschen
2015-11-20  9:29         ` Corinna Vinschen
2015-11-24 19:51           ` David Macek
2015-11-25  3:20   ` Linda Walsh
2015-11-25 14:59     ` David Macek
2015-11-26 11:53       ` Another reason to not corrupt winnative symlinks: :currenly, they are linux-CIFS compat. Cygwin's are not Linda Walsh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151126115339.GK2755@calimero.vinschen.de \
    --to=corinna-cygwin@cygwin.com \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).