diff options
author | vincentdarley <vincentdarley> | 2003-04-25 18:28:07 (GMT) |
---|---|---|
committer | vincentdarley <vincentdarley> | 2003-04-25 18:28:07 (GMT) |
commit | 2207395596d5bdd38f3c6d01187ee678155d227f (patch) | |
tree | e656382d969e18617331f33d44031f1301bdf523 /generic | |
parent | e39ac41979189210210c4ad46c3d86e7e72069fb (diff) | |
download | tcl-2207395596d5bdd38f3c6d01187ee678155d227f.zip tcl-2207395596d5bdd38f3c6d01187ee678155d227f.tar.gz tcl-2207395596d5bdd38f3c6d01187ee678155d227f.tar.bz2 |
fix to glob and filenames with square brackets
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclFileName.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/generic/tclFileName.c b/generic/tclFileName.c index 16bf9d0..84b92c7 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.40 2003/01/09 10:01:59 vincentdarley Exp $ + * RCS: @(#) $Id: tclFileName.c,v 1.41 2003/04/25 18:28:41 vincentdarley Exp $ */ #include "tclInt.h" @@ -2330,8 +2330,19 @@ TclDoGlob(interp, separators, headPtr, tail, types) count = 0; name = tail; for (; *tail != '\0'; tail++) { - if ((*tail == '\\') && (strchr(separators, tail[1]) != NULL)) { - tail++; + if (*tail == '\\') { + /* + * If the first character is escaped, either we have a directory + * separator, or we have any other character. In the latter case + * the rest of tail is a pattern, and we must break from the loop. + * This is particularly important on Windows where '\' is both + * the escaping character and a directory separator. + */ + if (strchr(separators, tail[1]) != NULL) { + tail++; + } else { + break; + } } else if (strchr(separators, *tail) == NULL) { break; } |