On 11/8/2020 9:40 AM, Michael Soegtrop wrote:
Why shouldn't I be able to remove symlinks with rm -rf from within a cygwin? As far as I understand the standard behavior of "rm" is to remove the symlink and not its target. What I do when I remove a cygwin installation in our CI is an "rm -rf" from a different cygwin installation. As I said in most cases this works but rarely it doesn't.
[...]
I understand that the contents / path of the symlink is as expected, so I am looking out for other oddities which could explain this behavior.

I've seen this behavior only in the following situation. Suppose you create a symlink in one Cygwin installation that uses WSL symlinks. Then you try to delete it from a different Cygwin installation with version < 3.1.5 (which is when WSL symlinks were first supported). This will fail, because the older Cygwin installation will see a reparse point of a type that it doesn't recognize.

From what you say, it sounds like this doesn't apply to your situation, so I'm at a loss to explain it.

Do you get any error message when you're unable to delete a symlink in one Cygwin installation from another? If not, you could try running 'rm <cygwin root>/usr/share/fonts/microsoft/wingding.ttf' under strace to see if that give you any clues. You could also try 'file', 'ls -l', 'stat', etc., to see if Cygwin is correctly recognizing the file as a symlink.

For example, I have a Cygwin installation in C:\cygwin64test. From a different Cygwin installation in which C: is mounted on /c, I see the following:

$ file /c/cygwin64test/usr/share/fonts/microsoft/wingding.ttf
/c/cygwin64test/usr/share/fonts/microsoft/wingding.ttf: symbolic link to /c/Windows/Fonts/wingding.ttf

Now I remove that symlink under strace:

$ strace -o strace.out rm /c/cygwin64test/usr/share/fonts/microsoft/wingding.ttf

In the file strace.out I see

57 26112 [main] rm 39456 symlink_info::check: 0x0 = NtCreateFile (\??\C:\cygwin64test\usr\share\fonts\microsoft\wingding.ttf) 100 26212 [main] rm 39456 symlink_info::check: 29 = symlink.check(C:\cygwin64test\usr\share\fonts\microsoft\wingding.ttf, 0xFFFFB680) (mount_flags 0x4008, path_flags 0x10) 26 26238 [main] rm 39456 path_conv::check: this->path(C:\cygwin64test\usr\share\fonts\microsoft\wingding.ttf), has_acls(1) 25 26263 [main] rm 39456 _unlink_nt: Trying to delete \??\C:\cygwin64test\usr\share\fonts\microsoft\wingding.ttf, isdir = 0 218 26481 [main] rm 39456 _unlink_nt: \??\C:\cygwin64test\usr\share\fonts\microsoft\wingding.ttf, return status = 0x0 33 26514 [main] rm 39456 unlink: 0 = unlink(/c/cygwin64test/usr/share/fonts/microsoft/wingding.ttf)

In your case I would expect to see some errors reported when you are unable to remove the symlink.

Ken
--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to