mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-15 06:41:38 +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'"},
|
||||||
{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'"},
|
{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'"},
|
{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', '.a..a', 'a..a'"},
|
||||||
{1, "*..", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
{0, "*..", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||||
{1, ".*.", ", '.', '..', '.a', '.aaa'"},
|
{1, ".*.", ", '.', '..', '.a', '.aaa'"},
|
||||||
{0, "..*", ", '.', '..', '..a', '..a.a'"},
|
{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'"},
|
{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'"},
|
||||||
{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'"},
|
||||||
{1, "* ..", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
{0, "* ..", ", '.', '..', 'a', '.a', '..a', 'aa', 'aaa', 'aaaa', '.aaa'"},
|
||||||
{1, " *..", ""},
|
{0, " *..", ""},
|
||||||
{0, "..* ", ", '.', '..', '..a', '..a.a'"},
|
{0, "..* ", ", '.', '..', '..a', '..a.a'"},
|
||||||
{1, "a*.", ", '..a', '.a', '.aaa', 'a', 'aa', 'aaa', 'aaaa'"},
|
{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'"},
|
{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
|
* 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 *mask_end = mask + lstrlenW( mask );
|
||||||
const WCHAR *lastjoker = NULL;
|
const WCHAR *lastjoker = NULL;
|
||||||
const WCHAR *next_to_retry = 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)
|
while (name < name_end && mask < mask_end)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue