summaryrefslogtreecommitdiffstats
path: root/generic/tclPathObj.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2017-05-08 16:14:10 (GMT)
committerdgp <dgp@users.sourceforge.net>2017-05-08 16:14:10 (GMT)
commit43e76a45e9898ae95f9bcd31bde84e224a92f4b4 (patch)
treec726fd889dd910320aa42ffefd5165ad7542926b /generic/tclPathObj.c
parente78b0c89457f00810603c8d4c21a67663327d88f (diff)
parentca65694482559e483a5684779f8cb6ee6a850d31 (diff)
downloadtcl-43e76a45e9898ae95f9bcd31bde84e224a92f4b4.zip
tcl-43e76a45e9898ae95f9bcd31bde84e224a92f4b4.tar.gz
tcl-43e76a45e9898ae95f9bcd31bde84e224a92f4b4.tar.bz2
merge trunk
Diffstat (limited to 'generic/tclPathObj.c')
-rw-r--r--generic/tclPathObj.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c
index fcf4dee..3e99b3c 100644
--- a/generic/tclPathObj.c
+++ b/generic/tclPathObj.c
@@ -921,7 +921,17 @@ TclJoinPath(
if (res != NULL) {
TclDecrRefCount(res);
}
- return TclNewFSPathObj(elt, str, len);
+
+ if (PATHFLAGS(elt)) {
+ return TclNewFSPathObj(elt, str, len);
+ }
+ if (TCL_PATH_ABSOLUTE != Tcl_FSGetPathType(elt)) {
+ return TclNewFSPathObj(elt, str, len);
+ }
+ (void) Tcl_FSGetNormalizedPath(NULL, elt);
+ if (elt == PATHOBJ(elt)->normPathPtr) {
+ return TclNewFSPathObj(elt, str, len);
+ }
}
}
@@ -948,6 +958,7 @@ TclJoinPath(
}
}
strElt = TclGetStringFromObj(elt, &strEltLen);
+ driveNameLength = 0;
type = TclGetPathType(elt, &fsPtr, &driveNameLength, &driveName);
if (type != TCL_PATH_RELATIVE) {
/*
@@ -1003,6 +1014,12 @@ TclJoinPath(
}
}
ptr = strElt;
+ /* [Bug f34cf83dd0] */
+ if (driveNameLength > 0) {
+ if (ptr[0] == '/' && ptr[-1] == '/') {
+ goto noQuickReturn;
+ }
+ }
while (*ptr != '\0') {
if (*ptr == '/' && (ptr[1] == '/' || ptr[1] == '\0')) {
/*