This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: x86_64 Cygwin 1.7.29: possible bug to trace symlink (Win7)
- From: Robert Bu <robert_bu at realsil dot com dot cn>
- To: "cygwin at cygwin dot com" <cygwin at cygwin dot com>
- Date: Mon, 21 Apr 2014 01:59:17 +0000
- Subject: Re: x86_64 Cygwin 1.7.29: possible bug to trace symlink (Win7)
- Authentication-results: sourceware.org; auth=none
- References: <0BA358A6A1AD484EA0BECE9A36AA31753D6F7D00 at rsex2 dot realsil dot com dot cn> <0BA358A6A1AD484EA0BECE9A36AA31753D6FCBC2 at rsex2 dot realsil dot com dot cn> <0BA358A6A1AD484EA0BECE9A36AA31753D6FFE94 at rsex2 dot realsil dot com dot cn> <0BA358A6A1AD484EA0BECE9A36AA31753D70AFC2 at rsex2 dot realsil dot com dot cn>
> On Apr 16 17:47, Corinna Vinschen wrote:
> > > Below is what I get:
> > > RS-I9E3U8R4:[~/tmp/test_symlink]>uname -a
> > > CYGWIN_NT-6.1 RS-I9E3U8R4 1.7.29(0.272/5/3) 2014-04-07 13:46 x86_64
> Cygwin
> > > RS-I9E3U8R4:[~/tmp/test_symlink]>echo $CYGWIN
> > > winsymlinks:nativestrict
> > > RS-I9E3U8R4:[~/tmp/test_symlink]>echo test > test.txt
> > > RS-I9E3U8R4:[~/tmp/test_symlink]>mkdir dest
> > > RS-I9E3U8R4:[~/tmp/test_symlink]>cd dest
> > > RS-I9E3U8R4:[~/tmp/test_symlink/dest]>ln -s ../test.txt test.txt
> > > RS-I9E3U8R4:[~/tmp/test_symlink/dest]>cd ../
> > > RS-I9E3U8R4:[~/tmp/test_symlink]>mkdir src
> > > RS-I9E3U8R4:[~/tmp/test_symlink]>cd src
> > > RS-I9E3U8R4:[~/tmp/test_symlink/src]>ln -s ../dest dest
> > > RS-I9E3U8R4:[~/tmp/test_symlink/src]>cd ../
> > > RS-I9E3U8R4:[~/tmp/test_symlink]>cat src/dest/test.txt
> > > cat: src/dest/test.txt: No such file or directory
> >
> > I can reproduce it now. I made a mistake when creating the symlinks
> > the first time, which is, I created them with tcsh. Tcsh tends to
> > change relative paths using ".." components to absolute paths on the
> > command line. Using plain relative paths, I now see what's going on.
> >
> > But it'sa tricky problem. I don't know how to fix it yet. I'll
> > have to think about it, so please be patient.
>
> This is a very interesting problem which (again) shows the downsides of
> the Cygwin path handling, namely the evaluation of the path from right
> to left, contrary to what POSIX demands. We really have to rewrite this
> code, but that's a lot of work for long and dark winter nights and days,
> not something we can do out of the blue.
>
> Therefore, I created a workaround within the constraints of the current
> code. Please try the today's snapshot from http://cygwin.com/snapshots/,
> it contains my workaround.
>
This snapshots works as expected.
> Note that in the current configuration we're having a recursion problem.
> If your path consists of more than 15 native symlinks, all of which have
> a ".." path component in the symlink target path, the result will be a
> "no such file or directory" again. This is pretty unlikely in normal
> life, but can be easily constructed, of course.
>
There are about 10 native symlinks in the repo created git directory. So
this workaround works for me for now.
Thank you very much.
Regards
Robert
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple