public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
@ 2016-04-28 22:18 Gene Pavlovsky
  2016-04-28 23:48 ` Andrey Repin
  0 siblings, 1 reply; 15+ messages in thread
From: Gene Pavlovsky @ 2016-04-28 22:18 UTC (permalink / raw)
  To: cygwin

Hello everybody!

First post on this mailing list, my name is Gene, I'm from Russia,
long-time Linux user, but had to use Windows as desktop for the last 8
years. Cygwin really helps me to keep my sanity! Thanks :)

I have an issue to report:

Introduction: On a UNIX system, `ln -s target link` creates a link
regardless of target's existence.
This is used in some scripts, e.g. Gentoo's `run-crons` (which I also
use on Cygwin) uses a symlink pointing to the running process PID as
lockfile.
Issue: if `CYGWIN=winsymlinks:nativestrict` env var is set, running
`ln -s target link` completely fails (even though running `mklink link
target` in `cmd.exe` succeeds, same as `ln -s` does on UNIX). If
`CYGWIN=winsymlinks:native`, a non-native link is created.

So, `nativestrict` might break some (admittedly unorthodox) scripts.
With `native` these script work, but still a native link would be
preferrable and it is possible to create, but a non-native link is
created instead.

Bottom line, I think the native symlink creation code should be
checked and a possibility should be added to create links to
non-existent targets, rather than the current behavior of failing.

Thanks!
--Gene

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-28 22:18 `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist Gene Pavlovsky
@ 2016-04-28 23:48 ` Andrey Repin
  2016-04-29  0:06   ` Eric Blake
                     ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Andrey Repin @ 2016-04-28 23:48 UTC (permalink / raw)
  To: Gene Pavlovsky, cygwin

Greetings, Gene Pavlovsky!

> I have an issue to report:

> Introduction: On a UNIX system, `ln -s target link` creates a link
> regardless of target's existence.
> This is used in some scripts, e.g. Gentoo's `run-crons` (which I also
> use on Cygwin) uses a symlink pointing to the running process PID as
> lockfile.
> Issue: if `CYGWIN=winsymlinks:nativestrict` env var is set, running
> `ln -s target link` completely fails (even though running `mklink link
> target` in `cmd.exe` succeeds, same as `ln -s` does on UNIX). If
> `CYGWIN=winsymlinks:native`, a non-native link is created.

> So, `nativestrict` might break some (admittedly unorthodox) scripts.
> With `native` these script work, but still a native link would be
> preferrable and it is possible to create, but a non-native link is
> created instead.

> Bottom line, I think the native symlink creation code should be
> checked and a possibility should be added to create links to
> non-existent targets, rather than the current behavior of failing.

This is actually an arguable behavior, even in Linux. I can imagine the
behavior is "undefined" in such a case.
But I'll leave final say to the more experienced members of the list.


-- 
With best regards,
Andrey Repin
Friday, April 29, 2016 01:55:21

Sorry for my terrible english...


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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-28 23:48 ` Andrey Repin
@ 2016-04-29  0:06   ` Eric Blake
  2016-04-29  5:23     ` Andrey Repin
  2016-04-29  0:09   ` Gene Pavlovsky
  2016-04-29 12:03   ` Gene Pavlovsky
  2 siblings, 1 reply; 15+ messages in thread
From: Eric Blake @ 2016-04-29  0:06 UTC (permalink / raw)
  To: cygwin

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

On 04/28/2016 05:06 PM, Andrey Repin wrote:
>> Bottom line, I think the native symlink creation code should be
>> checked and a possibility should be added to create links to
>> non-existent targets, rather than the current behavior of failing.
> 
> This is actually an arguable behavior, even in Linux. I can imagine the
> behavior is "undefined" in such a case.

POSIX says a symlink to a missing target is perfectly well-defined (you
can't stat() through it, but you can readlink() it). But Windows native
symlinks can't do that.  So the problems you are encountering all stem
from the fact that you are trying to make Windows do something it can't.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-28 23:48 ` Andrey Repin
  2016-04-29  0:06   ` Eric Blake
@ 2016-04-29  0:09   ` Gene Pavlovsky
  2016-04-29  1:46     ` Gene Pavlovsky
  2016-04-29 12:03   ` Gene Pavlovsky
  2 siblings, 1 reply; 15+ messages in thread
From: Gene Pavlovsky @ 2016-04-29  0:09 UTC (permalink / raw)
  To: cygwin

I don't know if POSIX standard has something to say about that, but
here's a reference from GNU libc:

`man 2 symlink`:
>       A symbolic link (also known as a soft link) may point to an existing file or to a nonexistent one; the latter case is known as a dangling link.

On 29 April 2016 at 02:06, Andrey Repin <anrdaemon@yandex.ru> wrote:
> Greetings, Gene Pavlovsky!
>
>> I have an issue to report:
>
>> Introduction: On a UNIX system, `ln -s target link` creates a link
>> regardless of target's existence.
>> This is used in some scripts, e.g. Gentoo's `run-crons` (which I also
>> use on Cygwin) uses a symlink pointing to the running process PID as
>> lockfile.
>> Issue: if `CYGWIN=winsymlinks:nativestrict` env var is set, running
>> `ln -s target link` completely fails (even though running `mklink link
>> target` in `cmd.exe` succeeds, same as `ln -s` does on UNIX). If
>> `CYGWIN=winsymlinks:native`, a non-native link is created.
>
>> So, `nativestrict` might break some (admittedly unorthodox) scripts.
>> With `native` these script work, but still a native link would be
>> preferrable and it is possible to create, but a non-native link is
>> created instead.
>
>> Bottom line, I think the native symlink creation code should be
>> checked and a possibility should be added to create links to
>> non-existent targets, rather than the current behavior of failing.
>
> This is actually an arguable behavior, even in Linux. I can imagine the
> behavior is "undefined" in such a case.
> But I'll leave final say to the more experienced members of the list.
>
>
> --
> With best regards,
> Andrey Repin
> Friday, April 29, 2016 01:55:21
>
> Sorry for my terrible english...
>

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-29  0:09   ` Gene Pavlovsky
@ 2016-04-29  1:46     ` Gene Pavlovsky
  0 siblings, 0 replies; 15+ messages in thread
From: Gene Pavlovsky @ 2016-04-29  1:46 UTC (permalink / raw)
  To: cygwin

The list of errors that might be returned by symlink(2) mention target
only 3 times:
       EFAULT target or linkpath points outside your accessible address space.
       ENAMETOOLONG
              target or linkpath was too long.
       ENOENT A directory component in linkpath does not exist or is a
dangling symbolic link, or target or linkpath is an empty string.

So my understanding is: target must be non-empty, not too long, and
don't point outside the accessible address space. Nothing about
existence.
--Gene


On 29 April 2016 at 03:05, Gene Pavlovsky <gene.pavlovsky@gmail.com> wrote:
> I don't know if POSIX standard has something to say about that, but
> here's a reference from GNU libc:
>
> `man 2 symlink`:
>>       A symbolic link (also known as a soft link) may point to an existing file or to a nonexistent one; the latter case is known as a dangling link.
>
> On 29 April 2016 at 02:06, Andrey Repin <anrdaemon@yandex.ru> wrote:
>> Greetings, Gene Pavlovsky!
>>
>>> I have an issue to report:
>>
>>> Introduction: On a UNIX system, `ln -s target link` creates a link
>>> regardless of target's existence.
>>> This is used in some scripts, e.g. Gentoo's `run-crons` (which I also
>>> use on Cygwin) uses a symlink pointing to the running process PID as
>>> lockfile.
>>> Issue: if `CYGWIN=winsymlinks:nativestrict` env var is set, running
>>> `ln -s target link` completely fails (even though running `mklink link
>>> target` in `cmd.exe` succeeds, same as `ln -s` does on UNIX). If
>>> `CYGWIN=winsymlinks:native`, a non-native link is created.
>>
>>> So, `nativestrict` might break some (admittedly unorthodox) scripts.
>>> With `native` these script work, but still a native link would be
>>> preferrable and it is possible to create, but a non-native link is
>>> created instead.
>>
>>> Bottom line, I think the native symlink creation code should be
>>> checked and a possibility should be added to create links to
>>> non-existent targets, rather than the current behavior of failing.
>>
>> This is actually an arguable behavior, even in Linux. I can imagine the
>> behavior is "undefined" in such a case.
>> But I'll leave final say to the more experienced members of the list.
>>
>>
>> --
>> With best regards,
>> Andrey Repin
>> Friday, April 29, 2016 01:55:21
>>
>> Sorry for my terrible english...
>>

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-29  0:06   ` Eric Blake
@ 2016-04-29  5:23     ` Andrey Repin
  0 siblings, 0 replies; 15+ messages in thread
From: Andrey Repin @ 2016-04-29  5:23 UTC (permalink / raw)
  To: Eric Blake, cygwin

Greetings, Eric Blake!

> On 04/28/2016 05:06 PM, Andrey Repin wrote:
>>> Bottom line, I think the native symlink creation code should be
>>> checked and a possibility should be added to create links to
>>> non-existent targets, rather than the current behavior of failing.
>> 
>> This is actually an arguable behavior, even in Linux. I can imagine the
>> behavior is "undefined" in such a case.

> POSIX says a symlink to a missing target is perfectly well-defined (you
> can't stat() through it, but you can readlink() it). But Windows native
> symlinks can't do that.  So the problems you are encountering all stem
> from the fact that you are trying to make Windows do something it can't.

My initial reaction was that, too, but I tried mklink (CMD internal command)

  mklink x y

and it created the symlink in the empty directory just fine.


-- 
With best regards,
Andrey Repin
Friday, April 29, 2016 07:40:02

Sorry for my terrible english...


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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-28 23:48 ` Andrey Repin
  2016-04-29  0:06   ` Eric Blake
  2016-04-29  0:09   ` Gene Pavlovsky
@ 2016-04-29 12:03   ` Gene Pavlovsky
  2016-04-29 12:15     ` Peter Rosin
  2 siblings, 1 reply; 15+ messages in thread
From: Gene Pavlovsky @ 2016-04-29 12:03 UTC (permalink / raw)
  To: cygwin

> > POSIX says a symlink to a missing target is perfectly well-defined (you
> > can't stat() through it, but you can readlink() it). But Windows native
> > symlinks can't do that.  So the problems you are encountering all stem
> > from the fact that you are trying to make Windows do something it can't.
>
> My initial reaction was that, too, but I tried mklink (CMD internal command)
>
> > mklink x y
>
> and it created the symlink in the empty directory just fine.

This is my point exactly. Windows dangling symlinks can be created as
easily as in UNIX.
At least this is the case on my Win7 x64.

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-29 12:03   ` Gene Pavlovsky
@ 2016-04-29 12:15     ` Peter Rosin
  2016-04-29 12:20       ` [cygwin] " Jason Pyeron
  2016-04-30 12:35       ` Gene Pavlovsky
  0 siblings, 2 replies; 15+ messages in thread
From: Peter Rosin @ 2016-04-29 12:15 UTC (permalink / raw)
  To: cygwin

On 2016-04-29 13:34, Gene Pavlovsky wrote:
>>> POSIX says a symlink to a missing target is perfectly well-defined (you
>>> can't stat() through it, but you can readlink() it). But Windows native
>>> symlinks can't do that.  So the problems you are encountering all stem
>>> from the fact that you are trying to make Windows do something it can't.
>>
>> My initial reaction was that, too, but I tried mklink (CMD internal command)
>>
>>> mklink x y
>>
>> and it created the symlink in the empty directory just fine.
> 
> This is my point exactly. Windows dangling symlinks can be created as
> easily as in UNIX.
> At least this is the case on my Win7 x64.

No, it can't.

c:\>mklink a b
c:\>mkdir b
c:\>cd b
c:\b>cd ..
c:\>cd a
The directory name is invalid
c:\>rmdir b
c:\>echo hello > b
c:\>type a
hello

It only works for dangling links to files. Not good enough.

Cheers,
Peter

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* RE: [cygwin] Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-29 12:15     ` Peter Rosin
@ 2016-04-29 12:20       ` Jason Pyeron
  2016-04-30 12:35       ` Gene Pavlovsky
  1 sibling, 0 replies; 15+ messages in thread
From: Jason Pyeron @ 2016-04-29 12:20 UTC (permalink / raw)
  To: cygwin

> -----Original Message-----
> From: Peter Rosin
> Sent: Friday, April 29, 2016 8:03 AM
> 
> On 2016-04-29 13:34, Gene Pavlovsky wrote:
> >>> POSIX says a symlink to a missing target is perfectly 
> well-defined 
> >>> (you can't stat() through it, but you can readlink() it). But 
> >>> Windows native symlinks can't do that.  So the problems you are 
> >>> encountering all stem from the fact that you are trying 
> to make Windows do something it can't.
> >>
> >> My initial reaction was that, too, but I tried mklink (CMD 
> internal 
> >> command)
> >>
> >>> mklink x y
> >>
> >> and it created the symlink in the empty directory just fine.
> > 
> > This is my point exactly. Windows dangling symlinks can be 
> created as 
> > easily as in UNIX.
> > At least this is the case on my Win7 x64.
> 
> No, it can't.
> 
> c:\>mklink a b
> c:\>mkdir b
> c:\>cd b
> c:\b>cd ..
> c:\>cd a
> The directory name is invalid
> c:\>rmdir b
> c:\>echo hello > b
> c:\>type a
> hello
> 
> It only works for dangling links to files. Not good enough.

To be more precise, you must choose file or dir symlinks at cretion time:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>cd C:\cygwin\tmp\winlinktest\dirs

C:\cygwin\tmp\winlinktest\dirs>mklink /D a b
symbolic link created for a <<===>> b

C:\cygwin\tmp\winlinktest\dirs>mkdir b

C:\cygwin\tmp\winlinktest\dirs>cd b

C:\cygwin\tmp\winlinktest\dirs\b>cd ..

C:\cygwin\tmp\winlinktest\dirs>cd a

C:\cygwin\tmp\winlinktest\dirs\a>cd ..

C:\cygwin\tmp\winlinktest\dirs>rmdir b

C:\cygwin\tmp\winlinktest\dirs>echo hello > b

C:\cygwin\tmp\winlinktest\dirs>type a
Access is denied.

C:\cygwin\tmp\winlinktest\dirs>del b

C:\cygwin\tmp\winlinktest\dirs>mkdir b

C:\cygwin\tmp\winlinktest\dirs>cd a

C:\cygwin\tmp\winlinktest\dirs\a>

Jason Pyeron

--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-                                                               -
- Jason Pyeron                      PD Inc. http://www.pdinc.us -
- Principal Consultant              10 West 24th Street #100    -
- +1 (443) 269-1555 x333            Baltimore, Maryland 21218   -
-                                                               -
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 



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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-29 12:15     ` Peter Rosin
  2016-04-29 12:20       ` [cygwin] " Jason Pyeron
@ 2016-04-30 12:35       ` Gene Pavlovsky
  2016-10-05  3:56         ` Rinrin
  1 sibling, 1 reply; 15+ messages in thread
From: Gene Pavlovsky @ 2016-04-30 12:35 UTC (permalink / raw)
  To: cygwin

I can confirm this behavior. Basically, mklink requires to choose file
(default) or directory (/D) link. It is true whether or not the target
exists (e.g. if your target is a directory,
/D is not implied automatically, you have to specify it). By contrast,
POSIX symlink doesn't distinguish file or directory symlinks.
So, what does it have to do with the topic exactly? According to your
logic, this is alos not good enough:

c:\>mkdir tmp

c:\>cd tmp

c:\tmp>mkdir target

c:\tmp>mklink /d link target
symbolic link created for link <<===>> target

c:\tmp>cd link

c:\tmp\link>cd ..

c:\tmp>rmdir target

c:\tmp>echo file >target

c:\tmp>cd link
The directory name is invalid.

c:\tmp>cat link
file

But it doesn't mean Cygwin should stop offering to use native symlinks
altogether, does it? What I mean is, POSIX symlinks are universal, and
NTFS symlinks are of two kinds. Using native symlinks, therefore, can
create potential problems, regardless of native or nativestrict mode.

I can see allowing dangling native symlinks can be a problem if
there's some script that creates some (dangling) symlinks, and then
later create some directories, to which the links are supposed to
point to, but since they didn't exist at link creation time, the links
are wrongfully of the file kind, and are not gonna work. I guess a
script like this can theoretically exist, even though it sounds quite
purposeless. Is this your concern? Then again, even crazier script can
exist, which creates a symlink pointing somewhere once, and then later
that somewhere can be removed and replaced with either a file or a
directory (sounds crazy and useless, but who knows? it's possible).
This script naturally will be broken whenever using native symlinks at
all.

I think some choice should be made here:
a) Allow creationg of dangling native symlinks (file by default).
b) Add a third native mode which is less strict than `nativestrict`,
but more strict than `native` - I'd like to use `nativestrict` on my
system, but due to this issue I have to use `native`.
c) Explicitly mention this behavior in Cygwin User Guide, so people
know that using `nativestrict` can break some scripts that rely on
creation of dangling symlinks. Currently the wording in CUG sounds
like it might fail because the filesystem doesn't support symlinks or
something.

Thanks.
--Gene


On 29 April 2016 at 15:02, Peter Rosin <peda@lysator.liu.se> wrote:
> On 2016-04-29 13:34, Gene Pavlovsky wrote:
>>>> POSIX says a symlink to a missing target is perfectly well-defined (you
>>>> can't stat() through it, but you can readlink() it). But Windows native
>>>> symlinks can't do that.  So the problems you are encountering all stem
>>>> from the fact that you are trying to make Windows do something it can't.
>>>
>>> My initial reaction was that, too, but I tried mklink (CMD internal command)
>>>
>>>> mklink x y
>>>
>>> and it created the symlink in the empty directory just fine.
>>
>> This is my point exactly. Windows dangling symlinks can be created as
>> easily as in UNIX.
>> At least this is the case on my Win7 x64.
>
> No, it can't.
>
> c:\>mklink a b
> c:\>mkdir b
> c:\>cd b
> c:\b>cd ..
> c:\>cd a
> The directory name is invalid
> c:\>rmdir b
> c:\>echo hello > b
> c:\>type a
> hello
>
> It only works for dangling links to files. Not good enough.
>
> Cheers,
> Peter

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-04-30 12:35       ` Gene Pavlovsky
@ 2016-10-05  3:56         ` Rinrin
  2016-10-05  4:31           ` Marco Atzeri
  2016-10-06 10:38           ` Gene Pavlovsky
  0 siblings, 2 replies; 15+ messages in thread
From: Rinrin @ 2016-10-05  3:56 UTC (permalink / raw)
  To: cygwin

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

Hi Gene:
  I made a patch for my private use.
  First of all, you should setup `nativenocheck` in CYGWIN environment
variable to enable this feature.
  If the target does not exist, it will check the last digit of target
path, for '/' it will create a <SYMLINKD> instead of <SYMLINK>



在 2016/4/30 8:14, Gene Pavlovsky 写道:
> I can confirm this behavior. Basically, mklink requires to choose file
> (default) or directory (/D) link. It is true whether or not the target
> exists (e.g. if your target is a directory,
> /D is not implied automatically, you have to specify it). By contrast,
> POSIX symlink doesn't distinguish file or directory symlinks.
> So, what does it have to do with the topic exactly? According to your
> logic, this is alos not good enough:
> 
> c:\>mkdir tmp
> 
> c:\>cd tmp
> 
> c:\tmp>mkdir target
> 
> c:\tmp>mklink /d link target
> symbolic link created for link <<===>> target
> 
> c:\tmp>cd link
> 
> c:\tmp\link>cd ..
> 
> c:\tmp>rmdir target
> 
> c:\tmp>echo file >target
> 
> c:\tmp>cd link
> The directory name is invalid.
> 
> c:\tmp>cat link
> file
> 
> But it doesn't mean Cygwin should stop offering to use native symlinks
> altogether, does it? What I mean is, POSIX symlinks are universal, and
> NTFS symlinks are of two kinds. Using native symlinks, therefore, can
> create potential problems, regardless of native or nativestrict mode.
> 
> I can see allowing dangling native symlinks can be a problem if
> there's some script that creates some (dangling) symlinks, and then
> later create some directories, to which the links are supposed to
> point to, but since they didn't exist at link creation time, the links
> are wrongfully of the file kind, and are not gonna work. I guess a
> script like this can theoretically exist, even though it sounds quite
> purposeless. Is this your concern? Then again, even crazier script can
> exist, which creates a symlink pointing somewhere once, and then later
> that somewhere can be removed and replaced with either a file or a
> directory (sounds crazy and useless, but who knows? it's possible).
> This script naturally will be broken whenever using native symlinks at
> all.
> 
> I think some choice should be made here:
> a) Allow creationg of dangling native symlinks (file by default).
> b) Add a third native mode which is less strict than `nativestrict`,
> but more strict than `native` - I'd like to use `nativestrict` on my
> system, but due to this issue I have to use `native`.
> c) Explicitly mention this behavior in Cygwin User Guide, so people
> know that using `nativestrict` can break some scripts that rely on
> creation of dangling symlinks. Currently the wording in CUG sounds
> like it might fail because the filesystem doesn't support symlinks or
> something.
> 
> Thanks.
> --Gene
> 
> 
> On 29 April 2016 at 15:02, Peter Rosin <peda@lysator.liu.se> wrote:
>> On 2016-04-29 13:34, Gene Pavlovsky wrote:
>>>>> POSIX says a symlink to a missing target is perfectly well-defined (you
>>>>> can't stat() through it, but you can readlink() it). But Windows native
>>>>> symlinks can't do that.  So the problems you are encountering all stem
>>>>> from the fact that you are trying to make Windows do something it can't.
>>>>
>>>> My initial reaction was that, too, but I tried mklink (CMD internal command)
>>>>
>>>>> mklink x y
>>>>
>>>> and it created the symlink in the empty directory just fine.
>>>
>>> This is my point exactly. Windows dangling symlinks can be created as
>>> easily as in UNIX.
>>> At least this is the case on my Win7 x64.
>>
>> No, it can't.
>>
>> c:\>mklink a b
>> c:\>mkdir b
>> c:\>cd b
>> c:\b>cd ..
>> c:\>cd a
>> The directory name is invalid
>> c:\>rmdir b
>> c:\>echo hello > b
>> c:\>type a
>> hello
>>
>> It only works for dangling links to files. Not good enough.
>>
>> Cheers,
>> Peter
> 
> --
> 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
> 


[-- Attachment #2: 0005-native-symlinks-non-exist-target-support.patch --]
[-- Type: application/x-itunes-itlp, Size: 4103 bytes --]

[-- Attachment #3: Type: text/plain, Size: 218 bytes --]

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-10-05  3:56         ` Rinrin
@ 2016-10-05  4:31           ` Marco Atzeri
  2016-10-06 10:38           ` Gene Pavlovsky
  1 sibling, 0 replies; 15+ messages in thread
From: Marco Atzeri @ 2016-10-05  4:31 UTC (permalink / raw)
  To: cygwin

On 05/10/2016 05:00, Rinrin wrote:
> Hi Gene:
>   I made a patch for my private use.
>   First of all, you should setup `nativenocheck` in CYGWIN environment
> variable to enable this feature.
>   If the target does not exist, it will check the last digit of target
> path, for '/' it will create a <SYMLINKD> instead of <SYMLINK>
>
>

BOTTOM POST on this list
please

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-10-05  3:56         ` Rinrin
  2016-10-05  4:31           ` Marco Atzeri
@ 2016-10-06 10:38           ` Gene Pavlovsky
  2016-10-07  5:33             ` Rinrin
  1 sibling, 1 reply; 15+ messages in thread
From: Gene Pavlovsky @ 2016-10-06 10:38 UTC (permalink / raw)
  To: cygwin

On 5 October 2016 at 06:00, Rinrin <rinrin@imbrian.org> wrote:
> Hi Gene:
>   I made a patch for my private use.
>   First of all, you should setup `nativenocheck` in CYGWIN environment
> variable to enable this feature.
>   If the target does not exist, it will check the last digit of target
> path, for '/' it will create a <SYMLINKD> instead of <SYMLINK>

Hi Rinrin.
I'd like to try it out, is your patch included in mainline Cygwin?
If not, how can I get a version with that patch?
Thanks.
--Gene

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-10-06 10:38           ` Gene Pavlovsky
@ 2016-10-07  5:33             ` Rinrin
  2016-10-09 19:16               ` Gene Pavlovsky
  0 siblings, 1 reply; 15+ messages in thread
From: Rinrin @ 2016-10-07  5:33 UTC (permalink / raw)
  To: cygwin

在 2016/10/6 18:14, Gene Pavlovsky 写道:
> On 5 October 2016 at 06:00, Rinrin <rinrin@imbrian.org> wrote:
>> Hi Gene:
>>   I made a patch for my private use.
>>   First of all, you should setup `nativenocheck` in CYGWIN environment
>> variable to enable this feature.
>>   If the target does not exist, it will check the last digit of target
>> path, for '/' it will create a <SYMLINKD> instead of <SYMLINK>
> 
> Hi Rinrin.
> I'd like to try it out, is your patch included in mainline Cygwin?
> If not, how can I get a version with that patch?
> Thanks.
> --Gene
I posted compiled version here.
http://www.megafileupload.com/kgm0/cygwin1.zip

This version contains another patch ripped from msys.
When cygwin process call non-cygwin executable, like mingw binary,
it will translate cygwin path format to windows format.

For example:
/mingw64/usr/bin $ iconv --help
Usage: C:\Portable\PrivData\cygwin\mingw64\usr\bin\iconv.exe [OPTION...]
[-f ENCODING] [-t ENCODING] [INPUTFILE...]
or:    C:\Portable\PrivData\cygwin\mingw64\usr\bin\iconv.exe -l

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist
  2016-10-07  5:33             ` Rinrin
@ 2016-10-09 19:16               ` Gene Pavlovsky
  0 siblings, 0 replies; 15+ messages in thread
From: Gene Pavlovsky @ 2016-10-09 19:16 UTC (permalink / raw)
  To: cygwin

Hey, sounds cool.
Did you submit your patch to Cygwin devs? Are there plans for accepting it?


On 7 October 2016 at 05:06, Rinrin <rinrin@imbrian.org> wrote:
> 在 2016/10/6 18:14, Gene Pavlovsky 写道:
>> On 5 October 2016 at 06:00, Rinrin <rinrin@imbrian.org> wrote:
>>> Hi Gene:
>>>   I made a patch for my private use.
>>>   First of all, you should setup `nativenocheck` in CYGWIN environment
>>> variable to enable this feature.
>>>   If the target does not exist, it will check the last digit of target
>>> path, for '/' it will create a <SYMLINKD> instead of <SYMLINK>
>>
>> Hi Rinrin.
>> I'd like to try it out, is your patch included in mainline Cygwin?
>> If not, how can I get a version with that patch?
>> Thanks.
>> --Gene
> I posted compiled version here.
> http://www.megafileupload.com/kgm0/cygwin1.zip
>
> This version contains another patch ripped from msys.
> When cygwin process call non-cygwin executable, like mingw binary,
> it will translate cygwin path format to windows format.
>
> For example:
> /mingw64/usr/bin $ iconv --help
> Usage: C:\Portable\PrivData\cygwin\mingw64\usr\bin\iconv.exe [OPTION...]
> [-f ENCODING] [-t ENCODING] [INPUTFILE...]
> or:    C:\Portable\PrivData\cygwin\mingw64\usr\bin\iconv.exe -l
>
> --
> 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
>

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2016-10-09 19:06 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-28 22:18 `CYGWIN=winsymlinks:nativestrict`, `ln -s target link` fails if target doesn't exist Gene Pavlovsky
2016-04-28 23:48 ` Andrey Repin
2016-04-29  0:06   ` Eric Blake
2016-04-29  5:23     ` Andrey Repin
2016-04-29  0:09   ` Gene Pavlovsky
2016-04-29  1:46     ` Gene Pavlovsky
2016-04-29 12:03   ` Gene Pavlovsky
2016-04-29 12:15     ` Peter Rosin
2016-04-29 12:20       ` [cygwin] " Jason Pyeron
2016-04-30 12:35       ` Gene Pavlovsky
2016-10-05  3:56         ` Rinrin
2016-10-05  4:31           ` Marco Atzeri
2016-10-06 10:38           ` Gene Pavlovsky
2016-10-07  5:33             ` Rinrin
2016-10-09 19:16               ` Gene Pavlovsky

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