diff options
| author | dgp <dgp@users.sourceforge.net> | 2017-05-08 16:14:10 (GMT) |
|---|---|---|
| committer | dgp <dgp@users.sourceforge.net> | 2017-05-08 16:14:10 (GMT) |
| commit | 43e76a45e9898ae95f9bcd31bde84e224a92f4b4 (patch) | |
| tree | c726fd889dd910320aa42ffefd5165ad7542926b /generic/tclPathObj.c | |
| parent | e78b0c89457f00810603c8d4c21a67663327d88f (diff) | |
| parent | ca65694482559e483a5684779f8cb6ee6a850d31 (diff) | |
| download | tcl-43e76a45e9898ae95f9bcd31bde84e224a92f4b4.zip tcl-43e76a45e9898ae95f9bcd31bde84e224a92f4b4.tar.gz tcl-43e76a45e9898ae95f9bcd31bde84e224a92f4b4.tar.bz2 | |
merge trunk
Diffstat (limited to 'generic/tclPathObj.c')
| -rw-r--r-- | generic/tclPathObj.c | 19 |
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')) { /* |
