Symbolic link bug in recent Cygwin DLL build

Mark Geisert mark@maxrnd.com
Tue Apr 21 07:15:44 GMT 2020


Corinna Vinschen wrote:
> On Apr 16 20:10, Mark Geisert wrote:
>> Sorry about the ML flub.  Your mention of cygdrive prefix gave me some
>> dread. From day 1 I've suppressed the prefix on any Cygwin machine I've
>> administered; I use /c or /d etc to refer to drives.  That means having this
>> line in /etc/fstab:
>>      none / cygdrive binary,posix=0,user 0 0
>>
>> The "/mnt" is being added at path.cc:1892.  It's replacing the current
>> cygdrive prefix with "/mnt".
> 
> Ok, that explains it.  It makes this function exactly this teeny little
> bit more complicated :-P
> 
>> I'm unclear why we're in a function named
>> symlink_wsl() since I'm not using WSL at all.  Maybe it means
>> WSL-compatible?  OK if so.
> 
> git log --grep symlinks d2e0b65a7fdc..HEAD >
>> Does that string replacement need to be skipped in this situation of "empty"
>> cygdrive prefix?  Or is it something more subtle?
> 
> It's a bit more subtil.  The code also tries to convert the cygdrive
> prefix to /mnt if no drive letter follows, so you can create a symlink
> to the cygdrive directory alone:
> 
>    $ ln -s /cygdrive /tmp/cygdrive_symlink
> 
> That also allowed the conversion cygdrive prefix to /mnt without having
> to look for the drive letters.  Now, with the cygdrive prefix being /,
> the first path component has to be checked for being... what?
> 
> - Just check for a single letter from a to z?  That would also wrongly
>    catch /x if /x is a real subdir in the root dir.
> 
> - Check for an existing drive letter from a to z?  That would break
>    the symlink conversion on the WSL side if the symlink was supposed
>    to be created pointing to, say, an USB thumb drive which was not
>    plugged in at the time of the symlink creation.
> 
> - Just skip any /mnt prefix if the cygdrive prefix is /?  That would
>    make all drive letter paths incompatible with WSL, and in contrast to
>    /mnt symlinks, it does not autommagically "fix" drive letter paths
>    if you ever change your cygdrive prefix, which is a neat side-effect
>    of the new symlinks, IMHO.
> 
> I'm leaning towards solution 3.

That seems OK to me but I don't have much depth of experience about possible 
downsides.  If it was instead decided that we need to require a "/path" for a 
cygdrive prefix in /etc/fstab I would just go back to creating symlinks like /c 
-> /cygdrive/c like I did long ago.

You want I should submit a patch for solution 3?

..mark



More information about the Cygwin-developers mailing list