From 51b4a42969366cc409808aded23d3602a34206e2 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 23 Jun 2017 13:53:43 +0200 Subject: [PATCH] mpr: Properly handle the count set to -1 when enumerating connections. Signed-off-by: Pierre Schweitzer Signed-off-by: Alexandre Julliard --- dlls/mpr/wnet.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/dlls/mpr/wnet.c b/dlls/mpr/wnet.c index cbbc1bdfb04..abade957501 100644 --- a/dlls/mpr/wnet.c +++ b/dlls/mpr/wnet.c @@ -1266,7 +1266,7 @@ static DWORD _copyStringToEnumW(const WCHAR *source, DWORD* left, void** end) static DWORD _enumerateConnectedW(PWNetEnumerator enumerator, DWORD* user_count, void* user_buffer, DWORD* user_size) { - DWORD ret, index, count, size, i, left; + DWORD ret, index, count, total_count, size, i, left; void* end; NETRESOURCEW* curr, * buffer; HANDLE* handles; @@ -1290,6 +1290,7 @@ static DWORD _enumerateConnectedW(PWNetEnumerator enumerator, DWORD* user_count, curr = user_buffer; end = (char *)user_buffer + size; count = *user_count; + total_count = 0; ret = WN_NO_MORE_ENTRIES; 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], &count, buffer, &size); + total_count += count; if (ret == WN_MORE_DATA) break; @@ -1343,19 +1345,22 @@ static DWORD _enumerateConnectedW(PWNetEnumerator enumerator, DWORD* user_count, ++curr; } - count = *user_count - count; + if (*user_count != -1) + count = *user_count - total_count; + else + count = *user_count; size = left; } - if (ret != WN_SUCCESS || count == 0) + if (ret != WN_SUCCESS || total_count == 0) break; } } - if (count == 0) + if (total_count == 0) ret = WN_NO_MORE_ENTRIES; - *user_count = *user_count - count; + *user_count = total_count; if (ret != WN_MORE_DATA && ret != WN_NO_MORE_ENTRIES) ret = WN_SUCCESS; -- 2.11.4.GIT