Alexandre Julliard : iphlpapi: Fix the return value of GetPerAdapterInfo, with tests.

Alexandre Julliard julliard at winehq.org
Thu Jul 3 06:34:55 CDT 2008


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jul  2 17:27:37 2008 +0200

iphlpapi: Fix the return value of GetPerAdapterInfo, with tests.

---

 dlls/iphlpapi/iphlpapi_main.c  |   27 +++++++++------------------
 dlls/iphlpapi/tests/iphlpapi.c |   24 +++++++++++++++++++++++-
 2 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index f624dde..430a943 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -1513,28 +1513,19 @@ DWORD WINAPI GetNumberOfInterfaces(PDWORD pdwNumIf)
 DWORD WINAPI GetPerAdapterInfo(ULONG IfIndex, PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen)
 {
   ULONG bytesNeeded = sizeof(IP_PER_ADAPTER_INFO);
-  DWORD ret;
 
-  TRACE("(IfIndex %d, pPerAdapterInfo %p, pOutBufLen %p)\n", IfIndex,
-   pPerAdapterInfo, pOutBufLen);
-  if (!pOutBufLen)
-    ret = ERROR_INVALID_PARAMETER;
-  else if (!pPerAdapterInfo)
-  {
-    *pOutBufLen = bytesNeeded;
-    ret = NO_ERROR;
-  }
-  else if (*pOutBufLen < bytesNeeded)
+  TRACE("(IfIndex %d, pPerAdapterInfo %p, pOutBufLen %p)\n", IfIndex, pPerAdapterInfo, pOutBufLen);
+
+  if (!pOutBufLen) return ERROR_INVALID_PARAMETER;
+
+  if (!pPerAdapterInfo || *pOutBufLen < bytesNeeded)
   {
     *pOutBufLen = bytesNeeded;
-    ret = ERROR_BUFFER_OVERFLOW;
-  }
-  else
-  {
-    memset(pPerAdapterInfo, 0, bytesNeeded);
-    ret = NO_ERROR;
+    return ERROR_BUFFER_OVERFLOW;
   }
-  return ret;
+
+  memset(pPerAdapterInfo, 0, bytesNeeded);
+  return NO_ERROR;
 }
 
 
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
index 79a2446..01eab25 100644
--- a/dlls/iphlpapi/tests/iphlpapi.c
+++ b/dlls/iphlpapi/tests/iphlpapi.c
@@ -61,6 +61,7 @@ typedef DWORD (WINAPI *GetTcpStatisticsFunc)(PMIB_TCPSTATS);
 typedef DWORD (WINAPI *GetUdpStatisticsFunc)(PMIB_UDPSTATS);
 typedef DWORD (WINAPI *GetTcpTableFunc)(PMIB_TCPTABLE,PDWORD,BOOL);
 typedef DWORD (WINAPI *GetUdpTableFunc)(PMIB_UDPTABLE,PDWORD,BOOL);
+typedef DWORD (WINAPI *GetPerAdapterInfoFunc)(ULONG,PIP_PER_ADAPTER_INFO,PULONG);
 
 static GetNumberOfInterfacesFunc gGetNumberOfInterfaces = NULL;
 static GetIpAddrTableFunc gGetIpAddrTable = NULL;
@@ -78,6 +79,7 @@ static GetTcpStatisticsFunc gGetTcpStatistics = NULL;
 static GetUdpStatisticsFunc gGetUdpStatistics = NULL;
 static GetTcpTableFunc gGetTcpTable = NULL;
 static GetUdpTableFunc gGetUdpTable = NULL;
+static GetPerAdapterInfoFunc gGetPerAdapterInfo = NULL;
 
 static void loadIPHlpApi(void)
 {
@@ -115,6 +117,7 @@ static void loadIPHlpApi(void)
      hLibrary, "GetTcpTable");
     gGetUdpTable = (GetUdpTableFunc)GetProcAddress(
      hLibrary, "GetUdpTable");
+    gGetPerAdapterInfo = (GetPerAdapterInfoFunc)GetProcAddress(hLibrary, "GetPerAdapterInfo");
   }
 }
 
@@ -584,6 +587,25 @@ static void testWin98Functions(void)
   testGetNetworkParams();
 }
 
+static void testGetPerAdapterInfo(void)
+{
+    DWORD ret, needed;
+    void *buffer;
+
+    if (!gGetPerAdapterInfo) return;
+    ret = gGetPerAdapterInfo(1, NULL, NULL);
+    ok( ret == ERROR_INVALID_PARAMETER, "got %u instead of ERROR_INVALID_PARAMETER\n", ret );
+    needed = 0xdeadbeef;
+    ret = gGetPerAdapterInfo(1, NULL, &needed);
+    if (ret == ERROR_NO_DATA) return;  /* no such adapter */
+    ok( ret == ERROR_BUFFER_OVERFLOW, "got %u instead of ERROR_BUFFER_OVERFLOW\n", ret );
+    ok( needed != 0xdeadbeef, "needed not set\n" );
+    buffer = HeapAlloc( GetProcessHeap(), 0, needed );
+    ret = gGetPerAdapterInfo(1, buffer, &needed);
+    ok( ret == NO_ERROR, "got %u instead of NO_ERROR\n", ret );
+    HeapFree( GetProcessHeap(), 0, buffer );
+}
+
 /*
 still-to-be-tested 2K-onward functions:
 AddIPAddress
@@ -593,7 +615,6 @@ DeleteProxyArpEntry
 EnableRouter
 FlushIpNetTable
 GetAdapterIndex
-GetPerAdapterInfo
 NotifyAddrChange
 NotifyRouteChange
 SendARP
@@ -601,6 +622,7 @@ UnenableRouter
 */
 static void testWin2KFunctions(void)
 {
+    testGetPerAdapterInfo();
 }
 
 START_TEST(iphlpapi)




More information about the wine-cvs mailing list