Symbolic link bug in recent Cygwin DLL build

Mark Geisert mark@maxrnd.com
Fri Apr 17 03:10:35 GMT 2020


Hi Corinna,

Corinna Vinschen wrote:
> Hi Mark,
> 
> On Apr 15 23:53, Mark Geisert wrote:
>> After installing a recent DLL built from the git source tree I noticed:
>>
>> ~ ln -s /tmp/foo .
>>
>> ~ ls -l foo
>> lrwxrwxrwx 1 Mark None 12 Apr 15 23:44 foo -> /mnt/tmp/foo
> 
> Huh?  That works for me, independently of /tmp/foo existing or not:
> 
>    $ ln -s /tmp/foo .
>    $ ls -l foo
>    lrwxrwxrwx 1 corinna Users 8 Apr 16 10:38 foo -> /tmp/foo
> 
> Since you're building the DLL yourself, can you please debug this with
> GDB?  It would be very important to find out what on your system adds
> the /mnt prefix!
> 
> It could occur in creating the symlink, that's in path.cc, function
> symlink_wsl(), or it could occur in reading the symlink, path.cc,
> function check_reparse_point_target(), in the else if (rp->ReparseTag ==
> IO_REPARSE_TAG_LX_SYMLINK) branch at line 2534.
> 
> As for /mnt itself, it's the WSL equivalent to the cygdrive prefix.
> When creating WSL symlinks, Cygwin converts the cygdrive prefix to
> /mnt, and when reading WSL symlinks, a leading /mnt is converted
> to the current cygdrive prefix on the fly.
> 
> We should just move further discussions to the cygwin-developers ML.

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".  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.

Does that string replacement need to be skipped in this situation of "empty" 
cygdrive prefix?  Or is it something more subtle?

..mark


More information about the Cygwin-developers mailing list