Commit 5e082305 authored by Alexandre Julliard's avatar Alexandre Julliard

kernel32: Close the directory handle in FindNextFile as soon as we reach the end of the directory.

parent 4471ad44
......@@ -1546,6 +1546,7 @@ HANDLE WINAPI FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_LEVELS level,
LPVOID data, FINDEX_SEARCH_OPS search_op,
LPVOID filter, DWORD flags)
{
static const WCHAR wildcardsW[] = { '*','?',0 };
WCHAR *mask, *p;
FIND_FIRST_INFO *info = NULL;
UNICODE_STRING nt_name;
......@@ -1637,6 +1638,12 @@ HANDLE WINAPI FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_LEVELS level,
SetLastError( ERROR_FILE_NOT_FOUND );
return INVALID_HANDLE_VALUE;
}
if (!strpbrkW( info->mask.Buffer, wildcardsW ))
{
/* we can't find two files with the same name */
CloseHandle( info->handle );
info->handle = 0;
}
return (HANDLE)info;
error:
......@@ -1671,7 +1678,8 @@ BOOL WINAPI FindNextFileW( HANDLE handle, WIN32_FIND_DATAW *data )
RtlEnterCriticalSection( &info->cs );
for (;;)
if (!info->handle) SetLastError( ERROR_NO_MORE_FILES );
else for (;;)
{
if (info->data_pos >= info->data_len) /* need to read some more data */
{
......@@ -1682,6 +1690,11 @@ BOOL WINAPI FindNextFileW( HANDLE handle, WIN32_FIND_DATAW *data )
if (io.u.Status)
{
SetLastError( RtlNtStatusToDosError( io.u.Status ) );
if (io.u.Status == STATUS_NO_MORE_FILES)
{
CloseHandle( info->handle );
info->handle = 0;
}
break;
}
info->data_len = io.Information;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment