summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar spholz2021-08-13 11:58:34 +0200
committerGravatar spholz2021-08-13 11:58:34 +0200
commitdeb65a5717036c4f6497d4102082921352dfcda0 (patch)
tree52fb2bf2d6eec1b7132356f5e9df49df46659f3a /src
parentnetwork: fix mingw-w64 build (diff)
downloadyuzu-deb65a5717036c4f6497d4102082921352dfcda0.tar.gz
yuzu-deb65a5717036c4f6497d4102082921352dfcda0.tar.xz
yuzu-deb65a5717036c4f6497d4102082921352dfcda0.zip
network: don't use reinterpret_cast in GetAvailableNetworkInterfaces
Diffstat (limited to 'src')
-rw-r--r--src/core/network/network_interface.cpp11
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
25std::vector<NetworkInterface> GetAvailableNetworkInterfaces() { 25std::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) {