On Mon, 1 Aug 2022 21:14:52 -0400 Ken Brown wrote: > On 7/31/2022 8:23 PM, Takashi Yano wrote: > > On Sun, 31 Jul 2022 17:21:32 +0900 > > Takashi Yano wrote: > >> On Sun, 31 Jul 2022 09:11:17 +0300 > >> Dimax wrote: > >>> Hello. > >>> I've never had much luck with Cygwin64 and used the 32 bit version before. > >>> Today I have no choice and I've installed Cyg64 on my new Win11 PC. > >>> > >>> Here is the first major issue I faced. I can not create symbolic links: > >>> > >>> Alex@Alexo ~ > >>> $ ls /cygdrive/C/XOL/ > >>> > >>> Alex@Alexo ~ > >>> $ ln -s /cygdrive/C/XOL/ work > >>> > >>> Alex@Alexo ~ > >>> $ ls -all work > >>> lrwxrwxrwx 1 Alex None 11 Jul 31 09:09 work -> /mnt/C/XOL/ > >>> > >>> Alex@Alexo ~ > >>> $ cd ~/work/ > >>> -bash: cd: /home/Alex/work/: No such file or directory > >>> > >>> The link is created but I can not use it. > >>> The only thing that I did not standard was to call installation folder > >>> C:\Cygwin instead of default C:\Cygwin64 > >>> > >>> Any help would be highly appreciated. > >> > >> Thanks for the report. This seems to happen only when > >> the drive letter is uppercase. > >> > >> ln -s /cygdrive/c/XOL/ work > >> works. > >> > >> Anyway, I think this is a problem of cygwin1.dll. > >> > >> This > >> work -> /mnt/C/XOL/ > >> should be > >> work -> /cygdrive/C/XOL/ > >> shouldn't it? > >> > >> It guess this is a bug in the code added for WSL > >> compatibility. > > > > I found the patch attached solves the issue. > > > > Corinna, WDYT? > > I'm not Corinna, but replacing oldpath by normpath doesn't seem like the > right > thing to do at the time of symlink creation. If I create a symlink under > Cygwin, I expect the target to be used under Cygwin exactly as I enter it. > The
Hmm, that's the point. > internal replacement of the cygdrive prefix by /mnt for WSL compatibility is > fine, as long as I never see it except under WSL. But since WSL doesn't > recognize /mnt/<uppercase drive letter>, I don't think Cygwin should convert > /<cygdrive prefix>/<uppercase drive letter>. Users who want WSL > interoperability just have to use lowercase drive letters. Then, what about the v2 patch attached? > I'm tempted to go even further and say that Cygwin shouldn't ever convert the > cygdrive prefix to /mnt, on the grounds that users who care about WSL > interoperability can simply use /mnt as their cygdrive prefix. But maybe > that > ship has sailed. -- Takashi Yano <takashi.y...@nifty.ne.jp>
From a190186c07449c7f9d08a13c26b87cad3f270a33 Mon Sep 17 00:00:00 2001 From: Takashi Yano <takashi.y...@nifty.ne.jp> Date: Mon, 1 Aug 2022 09:02:23 +0900 Subject: [PATCH v2] Cygwin: path: Make some symlinks to /cygdrive/* work. - Previously, some symbolic links to /cygdrive/* (/cygdrive/C, /cygdrive/./c, /cygdrive//c, etc.) did not work. This patch fixes the issue. Addresses: https://cygwin.com/pipermail/cygwin/2022-July/251994.html --- winsup/cygwin/path.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index eceafbbcf..c5ceb1da4 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -1929,7 +1929,11 @@ symlink_wsl (const char *oldpath, path_conv &win32_newpath) cygdrive prefix is not "/", otherwise suffer random "/mnt" symlinks... */ if (mount_table->cygdrive_len > 1 && path_prefix_p (mount_table->cygdrive, oldpath, - mount_table->cygdrive_len, false)) + mount_table->cygdrive_len, false) + && (strlen (oldpath + mount_table->cygdrive_len - 1) < 2 + || (islower (oldpath[mount_table->cygdrive_len]) + && (oldpath[mount_table->cygdrive_len + 1] == '/' + || oldpath[mount_table->cygdrive_len + 1] == '\0')))) stpcpy (stpcpy (path_buf, "/mnt"), oldpath + mount_table->cygdrive_len - 1); else -- 2.37.1
-- 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