mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 01:42:30 +00:00
fix iphlpapi winetests
svn path=/trunk/; revision=38469
This commit is contained in:
parent
bd0cab21cc
commit
2b9b7c7ab7
|
@ -1253,45 +1253,45 @@ static int IpNetTableSorter(const void *a, const void *b)
|
||||||
*/
|
*/
|
||||||
DWORD WINAPI GetIpNetTable(PMIB_IPNETTABLE pIpNetTable, PULONG pdwSize, BOOL bOrder)
|
DWORD WINAPI GetIpNetTable(PMIB_IPNETTABLE pIpNetTable, PULONG pdwSize, BOOL bOrder)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret = NO_ERROR;
|
||||||
|
|
||||||
TRACE("pIpNetTable %p, pdwSize %p, bOrder %ld\n", pIpNetTable, pdwSize,
|
TRACE("pIpNetTable %p, pdwSize %p, bOrder %d\n", pIpNetTable, pdwSize,
|
||||||
(DWORD)bOrder);
|
(DWORD)bOrder);
|
||||||
if (!pdwSize)
|
if (!pdwSize)
|
||||||
ret = ERROR_INVALID_PARAMETER;
|
ret = ERROR_INVALID_PARAMETER;
|
||||||
else {
|
else {
|
||||||
DWORD numEntries = getNumArpEntries();
|
DWORD numEntries = getNumArpEntries();
|
||||||
ULONG size = sizeof(MIB_IPNETTABLE) + (numEntries - 1) *
|
ULONG size = sizeof(MIB_IPNETTABLE);
|
||||||
sizeof(MIB_IPNETROW);
|
|
||||||
|
|
||||||
|
if (numEntries > 1)
|
||||||
|
size += (numEntries - 1) * sizeof(MIB_IPNETROW);
|
||||||
if (!pIpNetTable || *pdwSize < size) {
|
if (!pIpNetTable || *pdwSize < size) {
|
||||||
*pdwSize = size;
|
*pdwSize = size;
|
||||||
ret = ERROR_INSUFFICIENT_BUFFER;
|
ret = ERROR_INSUFFICIENT_BUFFER;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PMIB_IPNETTABLE table = getArpTable();
|
PMIB_IPNETTABLE table = getArpTable();
|
||||||
|
|
||||||
if (table) {
|
if (table) {
|
||||||
size = sizeof(MIB_IPNETTABLE) + (table->dwNumEntries - 1) *
|
size = sizeof(MIB_IPNETTABLE);
|
||||||
sizeof(MIB_IPNETROW);
|
if (table->dwNumEntries > 1)
|
||||||
|
size += (table->dwNumEntries - 1) * sizeof(MIB_IPNETROW);
|
||||||
if (*pdwSize < size) {
|
if (*pdwSize < size) {
|
||||||
*pdwSize = size;
|
*pdwSize = size;
|
||||||
ret = ERROR_INSUFFICIENT_BUFFER;
|
ret = ERROR_INSUFFICIENT_BUFFER;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
*pdwSize = size;
|
||||||
memcpy(pIpNetTable, table, size);
|
memcpy(pIpNetTable, table, size);
|
||||||
if (bOrder)
|
if (bOrder)
|
||||||
qsort(pIpNetTable->table, pIpNetTable->dwNumEntries,
|
qsort(pIpNetTable->table, pIpNetTable->dwNumEntries,
|
||||||
sizeof(MIB_IPNETROW), IpNetTableSorter);
|
sizeof(MIB_IPNETROW), IpNetTableSorter);
|
||||||
ret = NO_ERROR;
|
ret = NO_ERROR;
|
||||||
}
|
}
|
||||||
free(table);
|
HeapFree(GetProcessHeap(), 0, table);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
ret = ERROR_OUTOFMEMORY;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TRACE("returning %ld\n", ret);
|
TRACE("returning %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1527,6 +1527,12 @@ DWORD WINAPI GetPerAdapterInfo(ULONG IfIndex, PIP_PER_ADAPTER_INFO pPerAdapterIn
|
||||||
if (!pOutBufLen)
|
if (!pOutBufLen)
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
if (!pPerAdapterInfo || *pOutBufLen < sizeof(IP_PER_ADAPTER_INFO))
|
||||||
|
{
|
||||||
|
*pOutBufLen = sizeof(IP_PER_ADAPTER_INFO);
|
||||||
|
return ERROR_BUFFER_OVERFLOW;
|
||||||
|
}
|
||||||
|
|
||||||
ifName = getInterfaceNameByIndex(IfIndex);
|
ifName = getInterfaceNameByIndex(IfIndex);
|
||||||
if (!ifName)
|
if (!ifName)
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
@ -1659,58 +1665,60 @@ static int TcpTableSorter(const void *a, const void *b)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* GetTcpTable (IPHLPAPI.@)
|
* GetTcpTable (IPHLPAPI.@)
|
||||||
*
|
*
|
||||||
|
* Get the table of active TCP connections.
|
||||||
*
|
*
|
||||||
* PARAMS
|
* PARAMS
|
||||||
*
|
* pTcpTable [Out] buffer for TCP connections table
|
||||||
* pTcpTable [In/Out]
|
* pdwSize [In/Out] length of output buffer
|
||||||
* pdwSize [In/Out]
|
* bOrder [In] whether to order the table
|
||||||
* bOrder [In]
|
|
||||||
*
|
*
|
||||||
* RETURNS
|
* RETURNS
|
||||||
|
* Success: NO_ERROR
|
||||||
|
* Failure: error code from winerror.h
|
||||||
*
|
*
|
||||||
* DWORD
|
* NOTES
|
||||||
*
|
* If pdwSize is less than required, the function will return
|
||||||
|
* ERROR_INSUFFICIENT_BUFFER, and *pdwSize will be set to
|
||||||
|
* the required byte size.
|
||||||
|
* If bOrder is true, the returned table will be sorted, first by
|
||||||
|
* local address and port number, then by remote address and port
|
||||||
|
* number.
|
||||||
*/
|
*/
|
||||||
DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder)
|
DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret = NO_ERROR;
|
||||||
|
|
||||||
TRACE("pTcpTable %p, pdwSize %p, bOrder %ld\n", pTcpTable, pdwSize,
|
TRACE("pTcpTable %p, pdwSize %p, bOrder %d\n", pTcpTable, pdwSize,
|
||||||
(DWORD)bOrder);
|
(DWORD)bOrder);
|
||||||
if (!pdwSize)
|
if (!pdwSize)
|
||||||
ret = ERROR_INVALID_PARAMETER;
|
ret = ERROR_INVALID_PARAMETER;
|
||||||
else {
|
else {
|
||||||
DWORD numEntries = getNumTcpEntries();
|
DWORD numEntries = getNumTcpEntries();
|
||||||
ULONG size = sizeof(MIB_TCPTABLE) + (numEntries - 1) * sizeof(MIB_TCPROW);
|
DWORD size = sizeof(MIB_TCPTABLE);
|
||||||
|
|
||||||
|
if (numEntries > 1)
|
||||||
|
size += (numEntries - 1) * sizeof(MIB_TCPROW);
|
||||||
if (!pTcpTable || *pdwSize < size) {
|
if (!pTcpTable || *pdwSize < size) {
|
||||||
*pdwSize = size;
|
*pdwSize = size;
|
||||||
ret = ERROR_INSUFFICIENT_BUFFER;
|
ret = ERROR_INSUFFICIENT_BUFFER;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PMIB_TCPTABLE table = getTcpTable();
|
PMIB_TCPTABLE pTcpTable = getTcpTable();
|
||||||
|
if (pTcpTable)
|
||||||
|
{
|
||||||
|
size = sizeof(MIB_TCPTABLE);
|
||||||
|
if (pTcpTable->dwNumEntries > 1)
|
||||||
|
size += (pTcpTable->dwNumEntries - 1) * sizeof(MIB_TCPROW);
|
||||||
|
*pdwSize = size;
|
||||||
|
|
||||||
if (table) {
|
if (bOrder)
|
||||||
size = sizeof(MIB_TCPTABLE) + (table->dwNumEntries - 1) *
|
qsort(pTcpTable->table, pTcpTable->dwNumEntries,
|
||||||
sizeof(MIB_TCPROW);
|
sizeof(MIB_TCPROW), TcpTableSorter);
|
||||||
if (*pdwSize < size) {
|
ret = NO_ERROR;
|
||||||
*pdwSize = size;
|
}
|
||||||
ret = ERROR_INSUFFICIENT_BUFFER;
|
}
|
||||||
}
|
|
||||||
else {
|
|
||||||
memcpy(pTcpTable, table, size);
|
|
||||||
if (bOrder)
|
|
||||||
qsort(pTcpTable->table, pTcpTable->dwNumEntries,
|
|
||||||
sizeof(MIB_TCPROW), TcpTableSorter);
|
|
||||||
ret = NO_ERROR;
|
|
||||||
}
|
|
||||||
free(table);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ret = ERROR_OUTOFMEMORY;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
TRACE("returning %ld\n", ret);
|
TRACE("returning %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -549,7 +549,10 @@ DWORD getNumArpEntries(void)
|
||||||
&returnSize );
|
&returnSize );
|
||||||
|
|
||||||
if( status == STATUS_SUCCESS ) totalNumber += returnSize;
|
if( status == STATUS_SUCCESS ) totalNumber += returnSize;
|
||||||
if( IpArpTable ) tdiFreeThingSet( IpArpTable );
|
if( IpArpTable ) {
|
||||||
|
tdiFreeThingSet( IpArpTable );
|
||||||
|
IpArpTable = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue