summaryrefslogtreecommitdiffstats
path: root/generic/tclPathObj.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2017-05-01 20:25:27 (GMT)
committerdgp <dgp@users.sourceforge.net>2017-05-01 20:25:27 (GMT)
commitcebc6d8e934fb4416742c51d2a59bccd95e66c17 (patch)
tree83fdf7f47d86b8f2e75f3c5266cc29e1ea29e496 /generic/tclPathObj.c
parentaf6bdabef606d9aefa0cc8c4755c98b1445203d2 (diff)
parentcfdf3d1f29001198f2afdea91a595527acdc2802 (diff)
downloadtcl-cebc6d8e934fb4416742c51d2a59bccd95e66c17.zip
tcl-cebc6d8e934fb4416742c51d2a59bccd95e66c17.tar.gz
tcl-cebc6d8e934fb4416742c51d2a59bccd95e66c17.tar.bz2
[f9fe90d0fa] [file join] normalization. See filesystem-1.52*
Diffstat (limited to 'generic/tclPathObj.c')
-rw-r--r--generic/tclPathObj.c22
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;