https://bugs.winehq.org/show_bug.cgi?id=7961
Damjan Jovanovic damjan.jov@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |damjan.jov@gmail.com
--- Comment #23 from Damjan Jovanovic damjan.jov@gmail.com --- (In reply to Jason Edmeades from comment #7)
Similarly there are other pattern matching problems, and I havent looked to see if these are cause by findfirst/findnext (I am guessing they are), but I'll list them here for reference for when this bug is debugged - In windows, 'dir ???' lists all entries up to 3 characters in length which do not have a '.' in them. In wine if shows entries of exactly 3 entries and even includes ones with a . (eg. 'a.a')
The: dir "???" problem, at least, is easy to fix. All we have to do is skip trailing unmatched "?"s like we already do for "*" and ".". A (preliminary) patch such as the following works. However, while "a" and "aa" are correctly matched for "???", "a.a" is wrongly matched too - apparently the "." in filenames needs special handling.
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c index cf413f46e5c..5d567358f88 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c @@ -1375,8 +1375,8 @@ static BOOLEAN match_filename( const WCHAR *name, int length, const UNICODE_STRI break; } } - while (mask < mask_end && ((*mask == '.') || (*mask == '*'))) - mask++; /* Ignore trailing '.' or '*' in mask */ + while (mask < mask_end && ((*mask == '.') || (*mask == '*') || (*mask == '?'))) + mask++; /* Ignore trailing '.' or '*' or '?' in mask */ return (name == name_end && mask == mask_end); }