OriginalBugID: 6101 Bug
Version: 8.4a1
SubmitDate: '2000-08-09'
LastModified: '2000-09-05'
Severity: LOW
Status: Assigned
Submitter: techsupp
ChangedBy: hobbs
OS: Windows NT
FixedDate: '2000-10-25'
ClosedDate: '2000-10-25'
Name:
Michal Prussak
Comments:
Not really a big deal, but I thouht you should know.
ReproducibleScript:
Create files with names "*" and "[" (OK, * is perhaps bad, because NT applications can't access a file
with a * in the name anyway)
% glob {\*}
<gives listing of root directory>
% glob {\[}
no files matched glob pattern "\["
ObservedBehavior:
Files * and [ have not been matched
DesiredBehavior:
Files * and [ should have been matched, just like on Unix:
% glob {\[}
{[}
% glob {\*}
*
Verified this on 8.3.2 for Windows.
-- 09/05/2000 hobbs
Probably a fault in the Windows implementation of TclpMatchFilesTypes()
Logged In: YES
user_id=32170
This is, I believe, nothing to do with
TclpMatchFilesTypes. Since we are matching a literal
string here, 'glob' falls through to the end of TclDoGlob
which simply checks for existence of the file, using
Tcl_FSAccess (or since the patch was checked in yesterday)
Tcl_FSLStat. However, looking at the implementation of
stat on WinTcl, I see this:
/*
* Eliminate file names containing wildcard characters,
or subsequent
* call to FindFirstFile() will expand them, matching
some other file.
*/
transPtr = Tcl_FSGetTranslatedPath(NULL, pathPtr);
if (transPtr == NULL || (strpbrk(Tcl_GetString
(transPtr), "?*") != NULL)) {
Tcl_SetErrno(ENOENT);
return -1;
}
i.e. we purposefully disallow ourselves from statting any
file with '*' or '?' in the name. Since this bug is
reported against older versions of Tcl, it seems as
if 'access' has the same limitation (although it doesn't
seem to be explicitly coded in Tcl's core). I assume this
is therefore a limitation of the Win32 api's we use, and
therefore cannot be fixed (at least without changing those
api's).
I'm therefore assigning this to Jeff, since he seems to
know something about the 'real Win32' stuff (and I don't)
Logged In: NO
Note: this is related to the 'speed up stat 100x on
Windows' patch # 403001, in that if we apply a version of
that patch, then we no longer need to eliminate file names
contain wildcards, and this bug will go away.
Logged In: YES
user_id=32170
I don't know how to create a file called '*' on Win2000
(using Tcl or not) so I can't test the first part of the
bug, but I can make '[' work with the patch attached. This
is basically the 'patch to speedup stat 100x' (although the
speed up seems smaller). It seems to pass all tests on
Win2000, but should be tested on Win9x to make sure I've
got the 'A' as well as 'W' APIs correct.
unified diff in 'win' directory, with win eols