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