diff options
author | dgp <dgp@noemail.net> | 2010-01-05 18:58:35 (GMT) |
---|---|---|
committer | dgp <dgp@noemail.net> | 2010-01-05 18:58:35 (GMT) |
commit | e28aae67b22cafc242763f2cf3ecf03b22307df9 (patch) | |
tree | 0e5236fc16ed5cb30ddc15cf053d21bcf49dcf89 /generic/tclPathObj.c | |
parent | 21bfc839db2a2a731917bbb589f60a9be5f4fd35 (diff) | |
download | tcl-e28aae67b22cafc242763f2cf3ecf03b22307df9.zip tcl-e28aae67b22cafc242763f2cf3ecf03b22307df9.tar.gz tcl-e28aae67b22cafc242763f2cf3ecf03b22307df9.tar.bz2 |
* generic/tclPathObj.c (TclPathPart): Correct inconsistency between
* tests/fileName.test (filename-14.31): the string rep and the intrep
of a path value created by [file rootname]. Thanks to Vitaly Magerya
for reporting. [Bug 2918610]
FossilOrigin-Name: 07892416f42b69105ade94a889857297d811f2d7
Diffstat (limited to 'generic/tclPathObj.c')
-rw-r--r-- | generic/tclPathObj.c | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c index 610c05e..d6f2618 100644 --- a/generic/tclPathObj.c +++ b/generic/tclPathObj.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclPathObj.c,v 1.85 2009/12/21 23:25:39 nijtmans Exp $ + * RCS: @(#) $Id: tclPathObj.c,v 1.86 2010/01/05 18:58:36 dgp Exp $ */ #include "tclInt.h" @@ -661,34 +661,18 @@ TclPathPart( return pathPtr; } else { /* - * Duplicate the object we were given and then trim off - * the extension of the tail component of the path. + * Need to return the whole path with the extension + * suffix removed. Do that by joining our "head" to + * our "tail" with the extension suffix removed from + * the tail. */ - FsPath *fsDupPtr; - Tcl_Obj *root = Tcl_DuplicateObj(pathPtr); + Tcl_Obj *resultPtr = + TclNewFSPathObj(fsPathPtr->cwdPtr, fileName, + (int)(length - strlen(extension))); - Tcl_IncrRefCount(root); - fsDupPtr = PATHOBJ(root); - if (Tcl_IsShared(fsDupPtr->normPathPtr)) { - TclDecrRefCount(fsDupPtr->normPathPtr); - fsDupPtr->normPathPtr = Tcl_NewStringObj(fileName, - (int)(length - strlen(extension))); - Tcl_IncrRefCount(fsDupPtr->normPathPtr); - } else { - Tcl_SetObjLength(fsDupPtr->normPathPtr, - (int)(length - strlen(extension))); - } - - /* - * Must also trim the string representation if we have it. - */ - - if (root->bytes != NULL && root->length > 0) { - root->length -= strlen(extension); - root->bytes[root->length] = 0; - } - return root; + Tcl_IncrRefCount(resultPtr); + return resultPtr; } } default: |