Module: wine Branch: master Commit: 95827a8237fea9ef3fa0558a99009ff5c9c7cd9d URL: http://source.winehq.org/git/wine.git/?a=commit;h=95827a8237fea9ef3fa0558a99...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Mar 2 12:50:30 2009 +0100
iphlpapi: Moved AllocateAndGetUdpTableFromStack implementation to ipstats.c.
---
dlls/iphlpapi/iphlpapi_main.c | 56 +---------------------------------------- dlls/iphlpapi/ipstats.c | 41 ++++++++++++++++++++++++++++- dlls/iphlpapi/ipstats.h | 7 +--- 3 files changed, 42 insertions(+), 62 deletions(-)
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c index 0c5f209..735091b 100644 --- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -352,57 +352,6 @@ DWORD WINAPI AllocateAndGetTcpTableFromStack(PMIB_TCPTABLE *ppTcpTable, }
-static int UdpTableSorter(const void *a, const void *b) -{ - int ret; - - if (a && b) { - const MIB_UDPROW* rowA = (const MIB_UDPROW*)a; - const MIB_UDPROW* rowB = (const MIB_UDPROW*)b; - - ret = rowA->dwLocalAddr - rowB->dwLocalAddr; - if (ret == 0) - ret = rowA->dwLocalPort - rowB->dwLocalPort; - } - else - ret = 0; - return ret; -} - - -/****************************************************************** - * AllocateAndGetUdpTableFromStack (IPHLPAPI.@) - * - * Get the UDP listener table. - * Like GetUdpTable(), but allocate the returned table from heap. - * - * PARAMS - * ppUdpTable [Out] pointer into which the MIB_UDPTABLE is - * allocated and returned. - * bOrder [In] whether to sort the table - * heap [In] heap from which the table is allocated - * flags [In] flags to HeapAlloc - * - * RETURNS - * ERROR_INVALID_PARAMETER if ppUdpTable is NULL, whatever GetUdpTable() - * returns otherwise. - */ -DWORD WINAPI AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable, - BOOL bOrder, HANDLE heap, DWORD flags) -{ - DWORD ret; - - TRACE("ppUdpTable %p, bOrder %d, heap %p, flags 0x%08x\n", - ppUdpTable, bOrder, heap, flags); - ret = getUdpTable(ppUdpTable, heap, flags); - if (!ret && bOrder) - qsort((*ppUdpTable)->table, (*ppUdpTable)->dwNumEntries, - sizeof(MIB_UDPROW), UdpTableSorter); - TRACE("returning %d\n", ret); - return ret; -} - - /****************************************************************** * CreateIpForwardEntry (IPHLPAPI.@) * @@ -1650,7 +1599,7 @@ DWORD WINAPI GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder)
if (!pdwSize) return ERROR_INVALID_PARAMETER;
- ret = getUdpTable(&table, GetProcessHeap(), 0); + ret = AllocateAndGetUdpTableFromStack( &table, bOrder, GetProcessHeap(), 0 ); if (!ret) { DWORD size = FIELD_OFFSET( MIB_UDPTABLE, table[table->dwNumEntries] ); if (!pUdpTable || *pdwSize < size) { @@ -1660,9 +1609,6 @@ DWORD WINAPI GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder) else { *pdwSize = size; memcpy(pUdpTable, table, size); - if (bOrder) - qsort(pUdpTable->table, pUdpTable->dwNumEntries, - sizeof(MIB_UDPROW), UdpTableSorter); } HeapFree(GetProcessHeap(), 0, table); } diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index 9cfaa21..2277b80 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -1454,12 +1454,43 @@ static MIB_UDPTABLE *append_udp_row( HANDLE heap, DWORD flags, MIB_UDPTABLE *tab return table; }
-DWORD getUdpTable(PMIB_UDPTABLE *ppUdpTable, HANDLE heap, DWORD flags) +static int compare_udp_rows(const void *a, const void *b) +{ + const MIB_UDPROW *rowA = a; + const MIB_UDPROW *rowB = b; + int ret; + + if ((ret = rowA->dwLocalAddr - rowB->dwLocalAddr) != 0) return ret; + return rowA->dwLocalPort - rowB->dwLocalPort; +} + + +/****************************************************************** + * AllocateAndGetUdpTableFromStack (IPHLPAPI.@) + * + * Get the UDP listener table. + * Like GetUdpTable(), but allocate the returned table from heap. + * + * PARAMS + * ppUdpTable [Out] pointer into which the MIB_UDPTABLE is + * allocated and returned. + * bOrder [In] whether to sort the table + * heap [In] heap from which the table is allocated + * flags [In] flags to HeapAlloc + * + * RETURNS + * ERROR_INVALID_PARAMETER if ppUdpTable is NULL, whatever GetUdpTable() + * returns otherwise. + */ +DWORD WINAPI AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable, BOOL bOrder, + HANDLE heap, DWORD flags) { MIB_UDPTABLE *table; MIB_UDPROW row; DWORD ret = NO_ERROR, count = 16;
+ TRACE("table %p, bOrder %d, heap %p, flags 0x%08x\n", ppUdpTable, bOrder, heap, flags); + if (!ppUdpTable) return ERROR_INVALID_PARAMETER;
if (!(table = HeapAlloc( heap, flags, FIELD_OFFSET(MIB_UDPTABLE, table[count] )))) @@ -1496,8 +1527,14 @@ DWORD getUdpTable(PMIB_UDPTABLE *ppUdpTable, HANDLE heap, DWORD flags) #endif
if (!table) return ERROR_OUTOFMEMORY; - if (!ret) *ppUdpTable = table; + if (!ret) + { + if (bOrder && table->dwNumEntries) + qsort( table->table, table->dwNumEntries, sizeof(row), compare_udp_rows ); + *ppUdpTable = table; + } else HeapFree( heap, flags, table ); + TRACE( "returning ret %u table %p\n", ret, table ); return ret; }
diff --git a/dlls/iphlpapi/ipstats.h b/dlls/iphlpapi/ipstats.h index 147276e..431b414 100644 --- a/dlls/iphlpapi/ipstats.h +++ b/dlls/iphlpapi/ipstats.h @@ -72,11 +72,6 @@ DWORD getArpTable(PMIB_IPNETTABLE *ppIpNetTable, HANDLE heap, DWORD flags); /* Returns the number of entries in the UDP state table. */ DWORD getNumUdpEntries(void);
-/* Allocates the UDP state table from heap and returns it to you in *ppUdpTable. - * Returns NO_ERROR on success, something else on failure. - */ -DWORD getUdpTable(PMIB_UDPTABLE *ppUdpTable, HANDLE heap, DWORD flags); - /* Returns the number of entries in the TCP state table. */ DWORD getNumTcpEntries(void);
@@ -85,4 +80,6 @@ DWORD getNumTcpEntries(void); */ DWORD getTcpTable(PMIB_TCPTABLE *ppTcpTable, HANDLE heap, DWORD flags);
+DWORD WINAPI AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable, BOOL bOrder, HANDLE heap, DWORD flags); + #endif /* ndef WINE_IPSTATS_H_ */