diff options
| author | 2021-08-13 11:58:34 +0200 | |
|---|---|---|
| committer | 2021-08-13 11:58:34 +0200 | |
| commit | deb65a5717036c4f6497d4102082921352dfcda0 (patch) | |
| tree | 52fb2bf2d6eec1b7132356f5e9df49df46659f3a /src/core/network | |
| parent | network: fix mingw-w64 build (diff) | |
| download | yuzu-deb65a5717036c4f6497d4102082921352dfcda0.tar.gz yuzu-deb65a5717036c4f6497d4102082921352dfcda0.tar.xz yuzu-deb65a5717036c4f6497d4102082921352dfcda0.zip | |
network: don't use reinterpret_cast in GetAvailableNetworkInterfaces
Diffstat (limited to 'src/core/network')
| -rw-r--r-- | src/core/network/network_interface.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/core/network/network_interface.cpp b/src/core/network/network_interface.cpp index e9060f13f..75f4dc54f 100644 --- a/src/core/network/network_interface.cpp +++ b/src/core/network/network_interface.cpp | |||
| @@ -23,20 +23,17 @@ namespace Network { | |||
| 23 | #ifdef _WIN32 | 23 | #ifdef _WIN32 |
| 24 | 24 | ||
| 25 | std::vector<NetworkInterface> GetAvailableNetworkInterfaces() { | 25 | std::vector<NetworkInterface> GetAvailableNetworkInterfaces() { |
| 26 | std::vector<u8> adapter_addresses_raw; | 26 | std::vector<IP_ADAPTER_ADDRESSES> adapter_addresses; |
| 27 | auto adapter_addresses = reinterpret_cast<PIP_ADAPTER_ADDRESSES>(adapter_addresses_raw.data()); | ||
| 28 | DWORD ret = ERROR_BUFFER_OVERFLOW; | 27 | DWORD ret = ERROR_BUFFER_OVERFLOW; |
| 29 | DWORD buf_size = 0; | 28 | DWORD buf_size = 0; |
| 30 | 29 | ||
| 31 | // retry up to 5 times | 30 | // retry up to 5 times |
| 32 | for (int i = 0; i < 5 && ret == ERROR_BUFFER_OVERFLOW; i++) { | 31 | for (int i = 0; i < 5 && ret == ERROR_BUFFER_OVERFLOW; i++) { |
| 33 | ret = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER, | 32 | ret = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER, |
| 34 | nullptr, adapter_addresses, &buf_size); | 33 | nullptr, adapter_addresses.data(), &buf_size); |
| 35 | 34 | ||
| 36 | if (ret == ERROR_BUFFER_OVERFLOW) { | 35 | if (ret == ERROR_BUFFER_OVERFLOW) { |
| 37 | adapter_addresses_raw.resize(buf_size); | 36 | adapter_addresses.resize((buf_size / sizeof(IP_ADAPTER_ADDRESSES)) + 1); |
| 38 | adapter_addresses = | ||
| 39 | reinterpret_cast<PIP_ADAPTER_ADDRESSES>(adapter_addresses_raw.data()); | ||
| 40 | } else { | 37 | } else { |
| 41 | break; | 38 | break; |
| 42 | } | 39 | } |
| @@ -45,7 +42,7 @@ std::vector<NetworkInterface> GetAvailableNetworkInterfaces() { | |||
| 45 | if (ret == NO_ERROR) { | 42 | if (ret == NO_ERROR) { |
| 46 | std::vector<NetworkInterface> result; | 43 | std::vector<NetworkInterface> result; |
| 47 | 44 | ||
| 48 | for (auto current_address = adapter_addresses; current_address != nullptr; | 45 | for (auto current_address = adapter_addresses.data(); current_address != nullptr; |
| 49 | current_address = current_address->Next) { | 46 | current_address = current_address->Next) { |
| 50 | if (current_address->FirstUnicastAddress == nullptr || | 47 | if (current_address->FirstUnicastAddress == nullptr || |
| 51 | current_address->FirstUnicastAddress->Address.lpSockaddr == nullptr) { | 48 | current_address->FirstUnicastAddress->Address.lpSockaddr == nullptr) { |