mirror of
git://source.winehq.org/git/wine.git
synced 2024-07-21 16:54:09 +00:00
kernelbase: Support masks suggesting no extension in FindNextFile().
This commit is contained in:
parent
a90f695f78
commit
9ff0569667
|
@ -2974,21 +2974,21 @@ static void test_FindFirstFile_wildcards(void)
|
|||
{0, ".*.*", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa'"},
|
||||
{0, "*.*", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa', 'a', 'a..a', 'a.a', 'a.a.a', 'aa', 'aaa', 'aaaa', ' .a'"},
|
||||
{0, ".*", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa'"},
|
||||
{1, "*.", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{0, "*.", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{0, "*", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa', 'a', 'a..a', 'a.a', 'a.a.a', 'aa', 'aaa', 'aaaa', ' .a'"},
|
||||
{1, "*..*", ", '.', '..', '..a', '..a.a', '.a..a', 'a..a'"},
|
||||
{1, "*..", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{0, "*..", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{1, ".*.", ", '.', '..', '.a', '.aaa'"},
|
||||
{0, "..*", ", '.', '..', '..a', '..a.a'"},
|
||||
{0, "**", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa', 'a', 'a..a', 'a.a', 'a.a.a', 'aa', 'aaa', 'aaaa', ' .a'"},
|
||||
{0, "**.", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa', 'a', 'a..a', 'a.a', 'a.a.a', 'aa', 'aaa', 'aaaa', ' .a'"},
|
||||
{0, "*. ", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa', 'a', 'a..a', 'a.a', 'a.a.a', 'aa', 'aaa', 'aaaa', ' .a'"},
|
||||
{1, "* .", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{0, "* .", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{0, "* . ", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa', 'a', 'a..a', 'a.a', 'a.a.a', 'aa', 'aaa', 'aaaa', ' .a'"},
|
||||
{0, "*.. ", ", '.', '..', '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa', 'a', 'a..a', 'a.a', 'a.a.a', 'aa', 'aaa', 'aaaa', ' .a'"},
|
||||
{1, "*. .", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{1, "* ..", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{1, " *..", ""},
|
||||
{0, "*. .", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{0, "* ..", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||
{0, " *..", ""},
|
||||
{0, "..* ", ", '.', '..', '..a', '..a.a'"},
|
||||
{1, "a*.", ", '..a', '.a', '.aaa', 'a', 'aa', 'aaa', 'aaaa'"},
|
||||
{0, "*a ", ", '..a', '..a.a', '.a', '.a..a', '.a.a', '.aaa', 'a', 'a..a', 'a.a', 'a.a.a', 'aa', 'aaa', 'aaaa', ' .a'"},
|
||||
|
|
|
@ -1347,6 +1347,19 @@ BOOL WINAPI DECLSPEC_HOTPATCH FindNextFileA( HANDLE handle, WIN32_FIND_DATAA *da
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* name_has_ext
|
||||
*
|
||||
* Check if the file name has extension (skipping leading dots).
|
||||
*/
|
||||
static BOOL name_has_ext( const WCHAR *name, const WCHAR *name_end )
|
||||
{
|
||||
while (name != name_end && *name == '.') ++name;
|
||||
while (name != name_end && *name != '.') ++name;
|
||||
return name != name_end;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* match_filename
|
||||
*
|
||||
|
@ -1359,6 +1372,14 @@ static BOOL match_filename( const WCHAR *name, int length, const WCHAR *mask )
|
|||
const WCHAR *mask_end = mask + lstrlenW( mask );
|
||||
const WCHAR *lastjoker = NULL;
|
||||
const WCHAR *next_to_retry = NULL;
|
||||
const WCHAR *asterisk;
|
||||
|
||||
if (mask != mask_end && mask_end[-1] == '.' && (asterisk = wcschr( mask, '*' )) && asterisk == wcsrchr( mask, '*' )
|
||||
&& name_has_ext( name, name_end ))
|
||||
{
|
||||
/* Single '*' mask ending with '.' only matches files without extension. */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
while (name < name_end && mask < mask_end)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue