public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin] Cygwin: symlinks: fix WSL symlink creation if cygdrive prefix is /
@ 2020-04-21 9:18 Corinna Vinschen
0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2020-04-21 9:18 UTC (permalink / raw)
To: cygwin-cvs
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=6b97962073097adb7efe6ac04265df6a8596af21
commit 6b97962073097adb7efe6ac04265df6a8596af21
Author: Corinna Vinschen <corinna@vinschen.de>
Date: Tue Apr 21 10:31:53 2020 +0200
Cygwin: symlinks: fix WSL symlink creation if cygdrive prefix is /
If the cygdrive prefix is /, then the following happens right now:
$ ln -s /tmp/foo .
$ ls -l foo
lrwxrwxrwx 1 user group 12 Apr 15 23:44 foo -> /mnt/tmp/foo
Fix this by skipping cygdrive prefix conversion to WSL drive
prefix "/mnt", if the cygdrive prefix is just "/". There's no
satisfying way to do the right thing all the time in this case
anyway. For a description and the alternatives, see
https://cygwin.com/pipermail/cygwin-developers/2020-April/011859.html
Also, fix a typo in a comment.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diff:
---
winsup/cygwin/path.cc | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index f2b5cdbf1..36aa8278f 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -1886,15 +1886,17 @@ symlink_wsl (const char *oldpath, path_conv &win32_newpath)
rpl->ReparseTag = IO_REPARSE_TAG_LX_SYMLINK;
rpl->Reserved = 0;
rpl->LxSymlinkReparseBuffer.FileType = 2;
- /* Convert cygdrive prefix to "/mnt" for WSL compatibility. */
- if (path_prefix_p (mount_table->cygdrive, oldpath,
- mount_table->cygdrive_len, false))
+ /* Convert cygdrive prefix to "/mnt" for WSL compatibility, but only if
+ 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))
stpcpy (stpcpy (path_buf, "/mnt"),
oldpath + mount_table->cygdrive_len - 1);
else
*stpncpy (path_buf, oldpath, max_pathlen) = '\0';
/* Convert target path to UTF-16 and then back to UTF-8 to make sure the
- WSL symlink is in UTF-8, independet of the current Cygwin codeset. */
+ WSL symlink is in UTF-8, independent of the current Cygwin codeset. */
sys_mbstowcs (utf16, NT_MAX_PATH, path_buf);
len = WideCharToMultiByte (CP_UTF8, 0, utf16, -1, path_buf, max_pathlen,
NULL, NULL);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-04-21 9:18 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-21 9:18 [newlib-cygwin] Cygwin: symlinks: fix WSL symlink creation if cygdrive prefix is / Corinna Vinschen
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).