diff options
author | Kevin B Kenny <kennykb@acm.org> | 2005-06-21 19:20:07 (GMT) |
---|---|---|
committer | Kevin B Kenny <kennykb@acm.org> | 2005-06-21 19:20:07 (GMT) |
commit | 56f28b758b4acc2645154511abadd810ef8244c4 (patch) | |
tree | 430ef12151190d3965d9713909b934fb592680aa /generic | |
parent | 7f3ff45a57343745a50fb144bb29f676e93bd10b (diff) | |
download | tcl-56f28b758b4acc2645154511abadd810ef8244c4.zip tcl-56f28b758b4acc2645154511abadd810ef8244c4.tar.gz tcl-56f28b758b4acc2645154511abadd810ef8244c4.tar.bz2 |
bug 1194458
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclFileName.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/generic/tclFileName.c b/generic/tclFileName.c index 5bfad99..900f121 100644 --- a/generic/tclFileName.c +++ b/generic/tclFileName.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: tclFileName.c,v 1.69 2005/05/10 18:34:38 kennykb Exp $ + * RCS: @(#) $Id: tclFileName.c,v 1.70 2005/06/21 19:20:11 kennykb Exp $ */ #include "tclInt.h" @@ -629,8 +629,9 @@ SplitWinPath(path) Tcl_DStringFree(&buf); /* - * Split on slashes. Embedded elements that start with tilde will be - * prefixed with "./" so they are not affected by tilde substitution. + * Split on slashes. Embedded elements that start with tilde + * or a drive letter will be prefixed with "./" so they are not + * affected by tilde substitution. */ do { @@ -641,7 +642,10 @@ SplitWinPath(path) length = p - elementStart; if (length > 0) { Tcl_Obj *nextElt; - if ((elementStart[0] == '~') && (elementStart != path)) { + if ((elementStart != path) + && ((elementStart[0] == '~') + || (isalpha(UCHAR(elementStart[0])) + && elementStart[1] == ':'))) { nextElt = Tcl_NewStringObj("./",2); Tcl_AppendToObj(nextElt, elementStart, length); } else { @@ -738,18 +742,21 @@ TclpNativeJoinPath(prefix, joining) start = Tcl_GetStringFromObj(prefix, &length); /* - * Remove the ./ from tilde prefixed elements unless - * it is the first component. + * Remove the ./ from tilde prefixed elements, and drive-letter + * prefixed elements on Windows, unless it is the first component. */ p = joining; if (length != 0) { - if ((p[0] == '.') && (p[1] == '/') && (p[2] == '~')) { + if ((p[0] == '.') && (p[1] == '/') + && ((p[2] == '~') + || ((tclPlatform == TCL_PLATFORM_WINDOWS) + && isalpha(UCHAR(p[2])) + && (p[3] == ':')))) { p += 2; } } - if (*p == '\0') { return; } |