diff options
| author | dgp <dgp@users.sourceforge.net> | 2017-05-01 20:25:27 (GMT) |
|---|---|---|
| committer | dgp <dgp@users.sourceforge.net> | 2017-05-01 20:25:27 (GMT) |
| commit | 44c544160ac12ef622238f0a5e7f3eb1a1ca761e (patch) | |
| tree | 83fdf7f47d86b8f2e75f3c5266cc29e1ea29e496 /generic/tclPathObj.c | |
| parent | 799554b1c55435a6c7cc1f4529d3e468106b9091 (diff) | |
| parent | 262df0197b947ebc3e431b14680b1c52fb3cdefb (diff) | |
| download | tcl-44c544160ac12ef622238f0a5e7f3eb1a1ca761e.zip tcl-44c544160ac12ef622238f0a5e7f3eb1a1ca761e.tar.gz tcl-44c544160ac12ef622238f0a5e7f3eb1a1ca761e.tar.bz2 | |
[f9fe90d0fa] [file join] normalization. See filesystem-1.52*
Diffstat (limited to 'generic/tclPathObj.c')
| -rw-r--r-- | generic/tclPathObj.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c index 43a3c85..ffeb688 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); + } } } @@ -1312,8 +1322,14 @@ TclNewFSPathObj( fsPathPtr->translatedPathPtr = NULL; fsPathPtr->normPathPtr = Tcl_NewStringObj(addStrRep, len); Tcl_IncrRefCount(fsPathPtr->normPathPtr); - fsPathPtr->cwdPtr = dirPtr; - Tcl_IncrRefCount(dirPtr); + + if (TCL_PATH_ABSOLUTE == Tcl_FSGetPathType(dirPtr)) { + fsPathPtr->cwdPtr = Tcl_FSGetNormalizedPath(NULL, dirPtr); + } else { +fprintf(stdout, "FUCKING BROKEN!\n"); fflush(stdout); + fsPathPtr->cwdPtr = dirPtr; + } + Tcl_IncrRefCount(fsPathPtr->cwdPtr); fsPathPtr->nativePathPtr = NULL; fsPathPtr->fsPtr = NULL; fsPathPtr->filesystemEpoch = 0; |
