mpr: Properly handle the count set to -1 when enumerating connections.

Signed-off-by: Pierre Schweitzer <pierre@reactos.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Pierre Schweitzer 2017-06-23 13:53:43 +02:00 committed by Alexandre Julliard
parent a76ce84fce
commit 51b4a42969
1 changed files with 10 additions and 5 deletions

View File

@ -1266,7 +1266,7 @@ static DWORD _copyStringToEnumW(const WCHAR *source, DWORD* left, void** end)
static DWORD _enumerateConnectedW(PWNetEnumerator enumerator, DWORD* user_count, static DWORD _enumerateConnectedW(PWNetEnumerator enumerator, DWORD* user_count,
void* user_buffer, DWORD* user_size) void* user_buffer, DWORD* user_size)
{ {
DWORD ret, index, count, size, i, left; DWORD ret, index, count, total_count, size, i, left;
void* end; void* end;
NETRESOURCEW* curr, * buffer; NETRESOURCEW* curr, * buffer;
HANDLE* handles; HANDLE* handles;
@ -1290,6 +1290,7 @@ static DWORD _enumerateConnectedW(PWNetEnumerator enumerator, DWORD* user_count,
curr = user_buffer; curr = user_buffer;
end = (char *)user_buffer + size; end = (char *)user_buffer + size;
count = *user_count; count = *user_count;
total_count = 0;
ret = WN_NO_MORE_ENTRIES; ret = WN_NO_MORE_ENTRIES;
for (index = 0; index < providerTable->numProviders; index++) for (index = 0; index < providerTable->numProviders; index++)
@ -1309,6 +1310,7 @@ static DWORD _enumerateConnectedW(PWNetEnumerator enumerator, DWORD* user_count,
ret = providerTable->table[index].enumResource(handles[index], ret = providerTable->table[index].enumResource(handles[index],
&count, buffer, &count, buffer,
&size); &size);
total_count += count;
if (ret == WN_MORE_DATA) if (ret == WN_MORE_DATA)
break; break;
@ -1343,19 +1345,22 @@ static DWORD _enumerateConnectedW(PWNetEnumerator enumerator, DWORD* user_count,
++curr; ++curr;
} }
count = *user_count - count; if (*user_count != -1)
count = *user_count - total_count;
else
count = *user_count;
size = left; size = left;
} }
if (ret != WN_SUCCESS || count == 0) if (ret != WN_SUCCESS || total_count == 0)
break; break;
} }
} }
if (count == 0) if (total_count == 0)
ret = WN_NO_MORE_ENTRIES; ret = WN_NO_MORE_ENTRIES;
*user_count = *user_count - count; *user_count = total_count;
if (ret != WN_MORE_DATA && ret != WN_NO_MORE_ENTRIES) if (ret != WN_MORE_DATA && ret != WN_NO_MORE_ENTRIES)
ret = WN_SUCCESS; ret = WN_SUCCESS;