Browse Source

network: don't use reinterpret_cast in GetAvailableNetworkInterfaces

nce_cpp
spholz 4 years ago
parent
commit
9826ea72b2
  1. 11
      src/core/network/network_interface.cpp

11
src/core/network/network_interface.cpp

@ -23,20 +23,17 @@ namespace Network {
#ifdef _WIN32 #ifdef _WIN32
std::vector<NetworkInterface> GetAvailableNetworkInterfaces() { std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
std::vector<u8> adapter_addresses_raw;
auto adapter_addresses = reinterpret_cast<PIP_ADAPTER_ADDRESSES>(adapter_addresses_raw.data());
std::vector<IP_ADAPTER_ADDRESSES> adapter_addresses;
DWORD ret = ERROR_BUFFER_OVERFLOW; DWORD ret = ERROR_BUFFER_OVERFLOW;
DWORD buf_size = 0; DWORD buf_size = 0;
// retry up to 5 times // retry up to 5 times
for (int i = 0; i < 5 && ret == ERROR_BUFFER_OVERFLOW; i++) { for (int i = 0; i < 5 && ret == ERROR_BUFFER_OVERFLOW; i++) {
ret = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER, ret = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER,
nullptr, adapter_addresses, &buf_size);
nullptr, adapter_addresses.data(), &buf_size);
if (ret == ERROR_BUFFER_OVERFLOW) { if (ret == ERROR_BUFFER_OVERFLOW) {
adapter_addresses_raw.resize(buf_size);
adapter_addresses =
reinterpret_cast<PIP_ADAPTER_ADDRESSES>(adapter_addresses_raw.data());
adapter_addresses.resize((buf_size / sizeof(IP_ADAPTER_ADDRESSES)) + 1);
} else { } else {
break; break;
} }
@ -45,7 +42,7 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() {
if (ret == NO_ERROR) { if (ret == NO_ERROR) {
std::vector<NetworkInterface> result; std::vector<NetworkInterface> result;
for (auto current_address = adapter_addresses; current_address != nullptr;
for (auto current_address = adapter_addresses.data(); current_address != nullptr;
current_address = current_address->Next) { current_address = current_address->Next) {
if (current_address->FirstUnicastAddress == nullptr || if (current_address->FirstUnicastAddress == nullptr ||
current_address->FirstUnicastAddress->Address.lpSockaddr == nullptr) { current_address->FirstUnicastAddress->Address.lpSockaddr == nullptr) {

Loading…
Cancel
Save