Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
87875e12
Commit
87875e12
authored
Feb 01, 2020
by
Alex Henrie
Committed by
Alexandre Julliard
Feb 03, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
iphlpapi: Consolidate append_*_row functions.
Signed-off-by:
Alex Henrie
<
alexhenrie24@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
f90be6e1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
32 additions
and
119 deletions
+32
-119
ipstats.c
dlls/iphlpapi/ipstats.c
+32
-119
No files found.
dlls/iphlpapi/ipstats.c
View file @
87875e12
...
...
@@ -1326,24 +1326,24 @@ DWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS stats)
return
GetUdpStatisticsEx
(
stats
,
WS_AF_INET
);
}
static
MIB_IPFORWARDTABLE
*
append_ipforward_row
(
HANDLE
heap
,
DWORD
flags
,
MIB_IPFORWARDTABLE
*
table
,
DWORD
*
count
,
const
MIB_IPFORWARDROW
*
row
)
static
void
*
append_table_row
(
HANDLE
heap
,
DWORD
flags
,
void
*
table
,
DWORD
*
table_size
,
DWORD
*
table_capacity
,
const
void
*
row
,
DWORD
row_size
)
{
if
(
table
->
dwNumEntries
>=
*
count
)
DWORD
*
num_entries
=
table
;
/* this must be the first field */
if
(
*
num_entries
==
*
table_capacity
)
{
MIB_IPFORWARDTABLE
*
new_table
;
DWORD
new_count
=
table
->
dwNumEntries
*
2
;
if
(
!
(
new_table
=
HeapReAlloc
(
heap
,
flags
,
table
,
FIELD_OFFSET
(
MIB_IPFORWARDTABLE
,
table
[
new_count
]
))))
void
*
new_table
;
*
table_size
+=
*
table_capacity
*
row_size
;
if
(
!
(
new_table
=
HeapReAlloc
(
heap
,
flags
,
table
,
*
table_size
)))
{
HeapFree
(
heap
,
0
,
table
);
return
NULL
;
}
*
count
=
new_count
;
table
=
new_table
;
num_entries
=
table
=
new_table
;
*
table_capacity
*=
2
;
}
memcpy
(
&
table
->
table
[
table
->
dwNumEntries
++
],
row
,
sizeof
(
*
row
)
);
memcpy
(
(
char
*
)
table
+
*
table_size
-
(
*
table_capacity
-
*
num_entries
)
*
row_size
,
row
,
row_size
);
(
*
num_entries
)
++
;
return
table
;
}
...
...
@@ -1381,13 +1381,13 @@ DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForw
{
MIB_IPFORWARDTABLE
*
table
;
MIB_IPFORWARDROW
row
;
DWORD
ret
=
NO_ERROR
,
count
=
16
;
DWORD
ret
=
NO_ERROR
,
count
=
16
,
table_size
=
FIELD_OFFSET
(
MIB_IPFORWARDTABLE
,
table
[
count
]
)
;
TRACE
(
"table %p, bOrder %d, heap %p, flags 0x%08x
\n
"
,
ppIpForwardTable
,
bOrder
,
heap
,
flags
);
if
(
!
ppIpForwardTable
)
return
ERROR_INVALID_PARAMETER
;
if
(
!
(
table
=
HeapAlloc
(
heap
,
flags
,
FIELD_OFFSET
(
MIB_IPFORWARDTABLE
,
table
[
count
]
)
)))
if
(
!
(
table
=
HeapAlloc
(
heap
,
flags
,
table_size
)))
return
ERROR_OUTOFMEMORY
;
table
->
dwNumEntries
=
0
;
...
...
@@ -1428,7 +1428,7 @@ DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForw
* route is typically set with MIB_IPPROTO_NETMGMT instead */
row
.
u2
.
ForwardProto
=
MIB_IPPROTO_LOCAL
;
if
(
!
(
table
=
append_
ipforward_row
(
heap
,
flags
,
table
,
&
count
,
&
row
)))
if
(
!
(
table
=
append_
table_row
(
heap
,
flags
,
table
,
&
table_size
,
&
count
,
&
row
,
sizeof
(
row
)
)))
break
;
}
fclose
(
fp
);
...
...
@@ -1465,7 +1465,8 @@ DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForw
memcpy
(
name
,
entry
->
ipRouteIfIndex
.
o_bytes
,
namelen
);
name
[
namelen
]
=
0
;
getInterfaceIndexByName
(
name
,
&
row
.
dwForwardIfIndex
);
if
(
!
(
table
=
append_ipforward_row
(
heap
,
flags
,
table
,
&
count
,
&
row
)))
break
;
if
(
!
(
table
=
append_table_row
(
heap
,
flags
,
table
,
&
table_size
,
&
count
,
&
row
,
sizeof
(
row
)
)))
break
;
}
HeapFree
(
GetProcessHeap
(),
0
,
data
);
}
...
...
@@ -1573,7 +1574,7 @@ DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForw
}
}
if
(
!
(
table
=
append_
ipforward_row
(
heap
,
flags
,
table
,
&
count
,
&
row
)))
if
(
!
(
table
=
append_
table_row
(
heap
,
flags
,
table
,
&
table_size
,
&
count
,
&
row
,
sizeof
(
row
)
)))
break
;
}
done:
...
...
@@ -1596,27 +1597,6 @@ done:
return
ret
;
}
static
MIB_IPNETTABLE
*
append_ipnet_row
(
HANDLE
heap
,
DWORD
flags
,
MIB_IPNETTABLE
*
table
,
DWORD
*
count
,
const
MIB_IPNETROW
*
row
)
{
if
(
table
->
dwNumEntries
>=
*
count
)
{
MIB_IPNETTABLE
*
new_table
;
DWORD
new_count
=
table
->
dwNumEntries
*
2
;
if
(
!
(
new_table
=
HeapReAlloc
(
heap
,
flags
,
table
,
FIELD_OFFSET
(
MIB_IPNETTABLE
,
table
[
new_count
]
))))
{
HeapFree
(
heap
,
0
,
table
);
return
NULL
;
}
*
count
=
new_count
;
table
=
new_table
;
}
memcpy
(
&
table
->
table
[
table
->
dwNumEntries
++
],
row
,
sizeof
(
*
row
)
);
return
table
;
}
static
int
compare_ipnet_rows
(
const
void
*
a
,
const
void
*
b
)
{
const
MIB_IPNETROW
*
rowA
=
a
;
...
...
@@ -1648,13 +1628,13 @@ DWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable, BO
{
MIB_IPNETTABLE
*
table
;
MIB_IPNETROW
row
;
DWORD
ret
=
NO_ERROR
,
count
=
16
;
DWORD
ret
=
NO_ERROR
,
count
=
16
,
table_size
=
FIELD_OFFSET
(
MIB_IPNETTABLE
,
table
[
count
]
)
;
TRACE
(
"table %p, bOrder %d, heap %p, flags 0x%08x
\n
"
,
ppIpNetTable
,
bOrder
,
heap
,
flags
);
if
(
!
ppIpNetTable
)
return
ERROR_INVALID_PARAMETER
;
if
(
!
(
table
=
HeapAlloc
(
heap
,
flags
,
FIELD_OFFSET
(
MIB_IPNETTABLE
,
table
[
count
]
)
)))
if
(
!
(
table
=
HeapAlloc
(
heap
,
flags
,
table_size
)))
return
ERROR_OUTOFMEMORY
;
table
->
dwNumEntries
=
0
;
...
...
@@ -1700,7 +1680,7 @@ DWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable, BO
while
(
*
ptr
&&
isspace
(
*
ptr
))
ptr
++
;
getInterfaceIndexByName
(
ptr
,
&
row
.
dwIndex
);
if
(
!
(
table
=
append_
ipnet_row
(
heap
,
flags
,
table
,
&
count
,
&
row
)))
if
(
!
(
table
=
append_
table_row
(
heap
,
flags
,
table
,
&
table_size
,
&
count
,
&
row
,
sizeof
(
row
)
)))
break
;
}
fclose
(
fp
);
...
...
@@ -1728,7 +1708,8 @@ DWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable, BO
memcpy
(
name
,
entry
->
ipNetToMediaIfIndex
.
o_bytes
,
namelen
);
name
[
namelen
]
=
0
;
getInterfaceIndexByName
(
name
,
&
row
.
dwIndex
);
if
(
!
(
table
=
append_ipnet_row
(
heap
,
flags
,
table
,
&
count
,
&
row
)))
break
;
if
(
!
(
table
=
append_table_row
(
heap
,
flags
,
table
,
&
table_size
,
&
count
,
&
row
,
sizeof
(
row
)
)))
break
;
}
HeapFree
(
GetProcessHeap
(),
0
,
data
);
}
...
...
@@ -1784,7 +1765,7 @@ DWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable, BO
else
if
(
rtm
->
rtm_rmx
.
rmx_expire
!=
0
)
row
.
u
.
Type
=
MIB_IPNET_TYPE_DYNAMIC
;
else
row
.
u
.
Type
=
MIB_IPNET_TYPE_INVALID
;
if
(
!
(
table
=
append_
ipnet_row
(
heap
,
flags
,
table
,
&
count
,
&
row
)))
if
(
!
(
table
=
append_
table_row
(
heap
,
flags
,
table
,
&
table_size
,
&
count
,
&
row
,
sizeof
(
row
)
)))
break
;
}
next
+=
rtm
->
rtm_msglen
;
...
...
@@ -1846,30 +1827,6 @@ static DWORD get_tcp_table_sizes( TCP_TABLE_CLASS class, DWORD row_count, DWORD
return
table_size
;
}
static
MIB_TCPTABLE
*
append_tcp_row
(
TCP_TABLE_CLASS
class
,
HANDLE
heap
,
DWORD
flags
,
MIB_TCPTABLE
*
table
,
DWORD
*
count
,
const
MIB_TCPROW_OWNER_MODULE
*
row
,
DWORD
row_size
)
{
if
(
table
->
dwNumEntries
>=
*
count
)
{
MIB_TCPTABLE
*
new_table
;
DWORD
new_count
=
table
->
dwNumEntries
*
2
,
new_table_size
;
new_table_size
=
get_tcp_table_sizes
(
class
,
new_count
,
NULL
);
if
(
!
(
new_table
=
HeapReAlloc
(
heap
,
flags
,
table
,
new_table_size
)))
{
HeapFree
(
heap
,
0
,
table
);
return
NULL
;
}
*
count
=
new_count
;
table
=
new_table
;
}
memcpy
(
(
char
*
)
table
->
table
+
(
table
->
dwNumEntries
*
row_size
),
row
,
row_size
);
table
->
dwNumEntries
++
;
return
table
;
}
/* Why not a lookup table? Because the TCPS_* constants are different
on different platforms */
static
inline
MIB_TCP_STATE
TCPStateToMIBState
(
int
state
)
...
...
@@ -2156,7 +2113,7 @@ DWORD build_tcp_table( TCP_TABLE_CLASS class, void **tablep, BOOL order, HANDLE
row
.
liCreateTimestamp
.
QuadPart
=
0
;
/* FIXME */
memset
(
&
row
.
OwningModuleInfo
,
0
,
sizeof
(
row
.
OwningModuleInfo
)
);
}
if
(
!
(
table
=
append_t
cp_row
(
class
,
heap
,
flags
,
tabl
e
,
&
count
,
&
row
,
row_size
)))
if
(
!
(
table
=
append_t
able_row
(
heap
,
flags
,
table
,
&
table_siz
e
,
&
count
,
&
row
,
row_size
)))
break
;
}
HeapFree
(
GetProcessHeap
(),
0
,
map
);
...
...
@@ -2182,7 +2139,7 @@ DWORD build_tcp_table( TCP_TABLE_CLASS class, void **tablep, BOOL order, HANDLE
row
.
dwRemotePort
=
htons
(
entry
->
tcpConnRemPort
);
row
.
dwState
=
entry
->
tcpConnState
;
if
(
!
match_class
(
class
,
row
.
dwState
))
continue
;
if
(
!
(
table
=
append_t
cp_row
(
class
,
heap
,
flags
,
tabl
e
,
&
count
,
&
row
,
row_size
)))
if
(
!
(
table
=
append_t
able_row
(
heap
,
flags
,
table
,
&
table_siz
e
,
&
count
,
&
row
,
row_size
)))
break
;
}
HeapFree
(
GetProcessHeap
(),
0
,
data
);
...
...
@@ -2276,7 +2233,7 @@ DWORD build_tcp_table( TCP_TABLE_CLASS class, void **tablep, BOOL order, HANDLE
row
.
liCreateTimestamp
.
QuadPart
=
0
;
/* FIXME */
memset
(
&
row
.
OwningModuleInfo
,
0
,
sizeof
(
row
.
OwningModuleInfo
)
);
}
if
(
!
(
table
=
append_t
cp_row
(
class
,
heap
,
flags
,
tabl
e
,
&
count
,
&
row
,
row_size
)))
if
(
!
(
table
=
append_t
able_row
(
heap
,
flags
,
table
,
&
table_siz
e
,
&
count
,
&
row
,
row_size
)))
break
;
}
...
...
@@ -2395,29 +2352,6 @@ static DWORD get_udp_table_sizes( UDP_TABLE_CLASS class, DWORD row_count, DWORD
return
table_size
;
}
static
MIB_UDPTABLE
*
append_udp_row
(
UDP_TABLE_CLASS
class
,
HANDLE
heap
,
DWORD
flags
,
MIB_UDPTABLE
*
table
,
DWORD
*
count
,
const
MIB_UDPROW_OWNER_MODULE
*
row
,
DWORD
row_size
)
{
if
(
table
->
dwNumEntries
>=
*
count
)
{
MIB_UDPTABLE
*
new_table
;
DWORD
new_count
=
table
->
dwNumEntries
*
2
,
new_table_size
;
new_table_size
=
get_udp_table_sizes
(
class
,
new_count
,
NULL
);
if
(
!
(
new_table
=
HeapReAlloc
(
heap
,
flags
,
table
,
new_table_size
)))
{
HeapFree
(
heap
,
0
,
table
);
return
NULL
;
}
*
count
=
new_count
;
table
=
new_table
;
}
memcpy
(
(
char
*
)
table
->
table
+
(
table
->
dwNumEntries
*
row_size
),
row
,
row_size
);
table
->
dwNumEntries
++
;
return
table
;
}
static
int
compare_udp_rows
(
const
void
*
a
,
const
void
*
b
)
{
const
MIB_UDPROW
*
rowA
=
a
;
...
...
@@ -2474,7 +2408,7 @@ DWORD build_udp_table( UDP_TABLE_CLASS class, void **tablep, BOOL order, HANDLE
row
.
u
.
dwFlags
=
0
;
memset
(
&
row
.
OwningModuleInfo
,
0
,
sizeof
(
row
.
OwningModuleInfo
)
);
}
if
(
!
(
table
=
append_
udp_row
(
class
,
heap
,
flags
,
tabl
e
,
&
count
,
&
row
,
row_size
)))
if
(
!
(
table
=
append_
table_row
(
heap
,
flags
,
table
,
&
table_siz
e
,
&
count
,
&
row
,
row_size
)))
break
;
}
HeapFree
(
GetProcessHeap
(),
0
,
map
);
...
...
@@ -2496,7 +2430,8 @@ DWORD build_udp_table( UDP_TABLE_CLASS class, void **tablep, BOOL order, HANDLE
{
row
.
dwLocalAddr
=
entry
->
udpLocalAddress
;
row
.
dwLocalPort
=
htons
(
entry
->
udpLocalPort
);
if
(
!
(
table
=
append_udp_row
(
class
,
heap
,
flags
,
table
,
&
count
,
&
row
,
row_size
)))
break
;
if
(
!
(
table
=
append_table_row
(
heap
,
flags
,
table
,
&
table_size
,
&
count
,
&
row
,
row_size
)))
break
;
}
HeapFree
(
GetProcessHeap
(),
0
,
data
);
}
...
...
@@ -2584,7 +2519,8 @@ DWORD build_udp_table( UDP_TABLE_CLASS class, void **tablep, BOOL order, HANDLE
row
.
u
.
SpecificPortBind
=
!
(
pINData
->
inp_flags
&
INP_ANONPORT
);
memset
(
&
row
.
OwningModuleInfo
,
0
,
sizeof
(
row
.
OwningModuleInfo
)
);
}
if
(
!
(
table
=
append_udp_row
(
class
,
heap
,
flags
,
table
,
&
count
,
&
row
,
row_size
)))
break
;
if
(
!
(
table
=
append_table_row
(
heap
,
flags
,
table
,
&
table_size
,
&
count
,
&
row
,
row_size
)))
break
;
}
done:
...
...
@@ -2640,29 +2576,6 @@ static DWORD get_udp6_table_sizes( UDP_TABLE_CLASS class, DWORD row_count, DWORD
return
table_size
;
}
static
MIB_UDP6TABLE
*
append_udp6_row
(
UDP_TABLE_CLASS
class
,
HANDLE
heap
,
DWORD
flags
,
MIB_UDP6TABLE
*
table
,
DWORD
*
count
,
const
MIB_UDP6ROW_OWNER_MODULE
*
row
,
DWORD
row_size
)
{
if
(
table
->
dwNumEntries
>=
*
count
)
{
MIB_UDP6TABLE
*
new_table
;
DWORD
new_count
=
table
->
dwNumEntries
*
2
,
new_table_size
;
new_table_size
=
get_udp6_table_sizes
(
class
,
new_count
,
NULL
);
if
(
!
(
new_table
=
HeapReAlloc
(
heap
,
flags
,
table
,
new_table_size
)))
{
HeapFree
(
heap
,
0
,
table
);
return
NULL
;
}
*
count
=
new_count
;
table
=
new_table
;
}
memcpy
(
(
char
*
)
table
->
table
+
(
table
->
dwNumEntries
*
row_size
),
row
,
row_size
);
table
->
dwNumEntries
++
;
return
table
;
}
static
int
compare_udp6_rows
(
const
void
*
a
,
const
void
*
b
)
{
const
MIB_UDP6ROW
*
rowA
=
a
;
...
...
@@ -2824,7 +2737,7 @@ DWORD build_udp6_table( UDP_TABLE_CLASS class, void **tablep, BOOL order, HANDLE
row
.
u
.
dwFlags
=
0
;
memset
(
&
row
.
OwningModuleInfo
,
0
,
sizeof
(
row
.
OwningModuleInfo
)
);
}
if
(
!
(
table
=
append_
udp6_row
(
class
,
heap
,
flags
,
tabl
e
,
&
count
,
&
row
,
row_size
)))
if
(
!
(
table
=
append_
table_row
(
heap
,
flags
,
table
,
&
table_siz
e
,
&
count
,
&
row
,
row_size
)))
break
;
}
HeapFree
(
GetProcessHeap
(),
0
,
map
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment