summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2018-09-06 13:11:23 +1000
committerteor <teor@torproject.org>2018-09-07 11:03:10 +1000
commit1570f17f97ad99ddf3f63745ab3571c1aa411141 (patch)
treea7828f3180339cda3fa16f127a9dc860c198a51a /src/common
parentff1486385aed1172c18a8a593dec2684de891f60 (diff)
downloadtor-1570f17f97ad99ddf3f63745ab3571c1aa411141.tar.gz
tor-1570f17f97ad99ddf3f63745ab3571c1aa411141.zip
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.
Diffstat (limited to 'src/common')
-rw-r--r--src/common/address.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/common/address.c b/src/common/address.c
index 96b99fa082..794345a138 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -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");