Unverified Commit 1570f17f authored by teor's avatar teor
Browse files

Windows: Silence a spurious warning in the GetAdaptersAddresses cast

GetProcAddress() returns FARPROC, which is (long long int(*)()) on
64-bit Windows:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms683212(v=vs.85).aspx

But GetAdaptersAddresses() is (long unsigned int(*)()), on both 32-bit
and 64-bit Windows:
https://docs.microsoft.com/en-us/windows/desktop/api/iphlpapi/nf-iphlpapi-getadaptersaddresses

So gcc 8 issues a spurious "incompatible function pointer" warning
about the cast to GetAdaptersAddresses_fn_t.

Silence this warning by casting to a void function pointer, before
the cast to GetAdaptersAddresses_fn_t.

This issue is already fixed by 26481 in 0.3.5 and later, by removing
the lookup and cast.

Fixes bug 27465; bugfix on 0.2.3.11-alpha.
parent ff148638
o Minor bugfixes (compilation):
- Silence a spurious compiler warning on the GetAdaptersAddresses
function pointer cast. This issue is already fixed by 26481 in
0.3.5 and later, by removing the lookup and cast.
Fixes bug 27465; bugfix on 0.2.3.11-alpha.
......@@ -1492,7 +1492,10 @@ get_interface_addresses_win32(int severity, sa_family_t family)
goto done;
}
if (!(fn = (GetAdaptersAddresses_fn_t)
/* Cast through a void function pointer, to silence a spurious compiler
* warning on 64-bit Windows. This cast is safe, because we are casting to
* the correct type for GetAdaptersAddresses(). */
if (!(fn = (GetAdaptersAddresses_fn_t)(void(*)(void))
GetProcAddress(lib, "GetAdaptersAddresses"))) {
log_fn(severity, LD_NET, "Unable to obtain pointer to "
"GetAdaptersAddresses");
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment