Bruno Jesus : wlanapi: Implement WlanCloseHandle.

Alexandre Julliard julliard at winehq.org
Tue Jan 31 15:42:50 CST 2017


Module: wine
Branch: master
Commit: 062067d887b03bea65943b83f3c3762defd887ee
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=062067d887b03bea65943b83f3c3762defd887ee

Author: Bruno Jesus <00cpxxx at gmail.com>
Date:   Mon Jan 30 04:59:44 2017 -0200

wlanapi: Implement WlanCloseHandle.

Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wlanapi/main.c          | 25 +++++++++++++++++++++++--
 dlls/wlanapi/tests/wlanapi.c | 12 +++++++-----
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/dlls/wlanapi/main.c b/dlls/wlanapi/main.c
index 9b71330..303d173 100644
--- a/dlls/wlanapi/main.c
+++ b/dlls/wlanapi/main.c
@@ -35,6 +35,16 @@ static struct wine_wlan
     DWORD magic, cli_version;
 } handle_table[16];
 
+static struct wine_wlan* handle_index(HANDLE handle)
+{
+    ULONG_PTR i = (ULONG_PTR)handle - 1;
+
+    if (i < sizeof(handle_table) / sizeof(handle_table[0]) && handle_table[i].magic == WLAN_MAGIC)
+        return &handle_table[i];
+
+    return NULL;
+}
+
 static HANDLE handle_new(struct wine_wlan **entry)
 {
     ULONG_PTR i;
@@ -59,8 +69,19 @@ DWORD WINAPI WlanEnumInterfaces(HANDLE handle, void *reserved, WLAN_INTERFACE_IN
 
 DWORD WINAPI WlanCloseHandle(HANDLE handle, void *reserved)
 {
-    FIXME("(%p, %p) stub\n", handle, reserved);
-    return ERROR_CALL_NOT_IMPLEMENTED;
+    struct wine_wlan *wlan;
+
+    TRACE("(%p, %p)\n", handle, reserved);
+
+    if (!handle || reserved)
+        return ERROR_INVALID_PARAMETER;
+
+    wlan = handle_index(handle);
+    if (!wlan)
+        return ERROR_INVALID_HANDLE;
+
+    wlan->magic = 0;
+    return ERROR_SUCCESS;
 }
 
 DWORD WINAPI WlanOpenHandle(DWORD client_version, void *reserved, DWORD *negotiated_version, HANDLE *handle)
diff --git a/dlls/wlanapi/tests/wlanapi.c b/dlls/wlanapi/tests/wlanapi.c
index 7f8b83c..e0c55f6 100644
--- a/dlls/wlanapi/tests/wlanapi.c
+++ b/dlls/wlanapi/tests/wlanapi.c
@@ -71,7 +71,6 @@ static void test_WlanOpenHandle(void)
     ok(neg_version == 1, "Expected 1, got %d\n", neg_version);
     ok(handle != bad_handle && handle, "handle changed\n");
     ret = WlanCloseHandle(handle, NULL);
-todo_wine
     ok(ret == 0, "Expected 0, got %d\n", ret);
 
     ret = WlanOpenHandle(2, NULL, &neg_version, &handle);
@@ -82,7 +81,6 @@ todo_wine
       ok(neg_version == 1, "Expected 1, got %d\n", neg_version);
     ok(handle != bad_handle && handle, "bad handle\n");
     ret = WlanCloseHandle(handle, NULL);
-todo_wine
     ok(ret == 0, "Expected 0, got %d\n", ret);
 
     /* open twice */
@@ -91,15 +89,19 @@ todo_wine
     ret = WlanOpenHandle(1, NULL, &neg_version, &handle2);
     ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret);
 
-todo_wine {
+    ret = WlanCloseHandle(handle, &reserved);
+    ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret);
+
     ret = WlanCloseHandle(handle, NULL);
     ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret);
     ret = WlanCloseHandle(handle2, NULL);
     ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret);
 
+    ret = WlanCloseHandle(bad_handle, NULL);
+    ok(ret == ERROR_INVALID_HANDLE, "Expected 6, got %d\n", ret);
+
     ret = WlanCloseHandle(NULL, NULL);
-    ok(ret == ERROR_INVALID_PARAMETER, "Expected 0, got %d\n", ret);
-}
+    ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret);
 }
 
 static void test_WlanAllocateFreeMemory(void)




More information about the wine-cvs mailing list