53 lines
2.0 KiB
Diff
53 lines
2.0 KiB
Diff
From 7ad158939560bbfc838bd551f891bf5772d8d528 Mon Sep 17 00:00:00 2001
|
|
From: Jeremy Drake <github@jdrake.com>
|
|
Date: Thu, 22 Jul 2021 11:59:16 -0700
|
|
Subject: [PATCH 26/N] Cygwin: make option for native inner link handling.
|
|
|
|
This code has been causing issues with SUBST and mapped network drives,
|
|
so add an option (defaulted to on) which can be used to disable it where
|
|
needed. MSYS=nonativeinnerlinks
|
|
---
|
|
winsup/cygwin/environ.cc | 1 +
|
|
winsup/cygwin/globals.cc | 1 +
|
|
winsup/cygwin/path.cc | 3 ++-
|
|
3 files changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc
|
|
index 31ada02..b285a7c 100644
|
|
--- a/winsup/cygwin/environ.cc
|
|
+++ b/winsup/cygwin/environ.cc
|
|
@@ -129,6 +129,7 @@ static struct parse_thing
|
|
{"disable_pcon", {&disable_pcon}, setbool, NULL, {{false}, {true}}},
|
|
{"enable_pcon", {&disable_pcon}, setnegbool, NULL, {{true}, {false}}},
|
|
{"winjitdebug", {&winjitdebug}, setbool, NULL, {{false}, {true}}},
|
|
+ {"nativeinnerlinks", {&nativeinnerlinks}, setbool, NULL, {{false}, {true}}},
|
|
{NULL, {0}, setdword, 0, {{0}, {0}}}
|
|
};
|
|
|
|
diff --git a/winsup/cygwin/globals.cc b/winsup/cygwin/globals.cc
|
|
index f243aad..bb37ca2 100644
|
|
--- a/winsup/cygwin/globals.cc
|
|
+++ b/winsup/cygwin/globals.cc
|
|
@@ -74,6 +74,7 @@ bool wincmdln = true;
|
|
winsym_t allow_winsymlinks = WSYM_deepcopy;
|
|
bool disable_pcon;
|
|
bool winjitdebug = false;
|
|
+bool nativeinnerlinks = true;
|
|
|
|
bool NO_COPY in_forkee;
|
|
|
|
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
|
|
index 2f0519f..92b1fca 100644
|
|
--- a/winsup/cygwin/path.cc
|
|
+++ b/winsup/cygwin/path.cc
|
|
@@ -3623,7 +3623,8 @@ restart:
|
|
differ, return the final path as symlink content and set symlen
|
|
to a negative value. This forces path_conv::check to restart
|
|
symlink evaluation with the new path. */
|
|
- if ((pc_flags & (PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP)) == PC_SYM_FOLLOW)
|
|
+ if (nativeinnerlinks
|
|
+ && (pc_flags & (PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP)) == PC_SYM_FOLLOW)
|
|
{
|
|
PWCHAR fpbuf = tp.w_get ();
|
|
DWORD ret;
|