mirror of https://github.com/PCSX2/pcsx2.git
DEV9: Use unique_ptr via typedef for ifadddrs buffer
This commit is contained in:
parent
31fa1ea21e
commit
41a47f99f7
|
@ -42,7 +42,7 @@
|
||||||
using namespace PacketReader::IP;
|
using namespace PacketReader::IP;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
bool AdapterUtils::GetWin32Adapter(const std::string& name, PIP_ADAPTER_ADDRESSES adapter, std::unique_ptr<IP_ADAPTER_ADDRESSES[]>* buffer)
|
bool AdapterUtils::GetWin32Adapter(const std::string& name, PIP_ADAPTER_ADDRESSES adapter, AdapterBuffer* buffer)
|
||||||
{
|
{
|
||||||
int neededSize = 128;
|
int neededSize = 128;
|
||||||
std::unique_ptr<IP_ADAPTER_ADDRESSES[]> adapterInfo = std::make_unique<IP_ADAPTER_ADDRESSES[]>(neededSize);
|
std::unique_ptr<IP_ADAPTER_ADDRESSES[]> adapterInfo = std::make_unique<IP_ADAPTER_ADDRESSES[]>(neededSize);
|
||||||
|
@ -91,7 +91,7 @@ bool AdapterUtils::GetWin32Adapter(const std::string& name, PIP_ADAPTER_ADDRESSE
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool AdapterUtils::GetWin32AdapterAuto(PIP_ADAPTER_ADDRESSES adapter, std::unique_ptr<IP_ADAPTER_ADDRESSES[]>* buffer)
|
bool AdapterUtils::GetWin32AdapterAuto(PIP_ADAPTER_ADDRESSES adapter, AdapterBuffer* buffer)
|
||||||
{
|
{
|
||||||
int neededSize = 128;
|
int neededSize = 128;
|
||||||
std::unique_ptr<IP_ADAPTER_ADDRESSES[]> adapterInfo = std::make_unique<IP_ADAPTER_ADDRESSES[]>(neededSize);
|
std::unique_ptr<IP_ADAPTER_ADDRESSES[]> adapterInfo = std::make_unique<IP_ADAPTER_ADDRESSES[]>(neededSize);
|
||||||
|
@ -168,16 +168,18 @@ bool AdapterUtils::GetWin32AdapterAuto(PIP_ADAPTER_ADDRESSES adapter, std::uniqu
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#elif defined(__POSIX__)
|
#elif defined(__POSIX__)
|
||||||
bool AdapterUtils::GetIfAdapter(const std::string& name, ifaddrs* adapter, ifaddrs** buffer)
|
bool AdapterUtils::GetIfAdapter(const std::string& name, ifaddrs* adapter, AdapterBuffer* buffer)
|
||||||
{
|
{
|
||||||
ifaddrs* adapterInfo;
|
ifaddrs* ifa;
|
||||||
ifaddrs* pAdapter;
|
ifaddrs* pAdapter;
|
||||||
|
|
||||||
int error = getifaddrs(&adapterInfo);
|
int error = getifaddrs(&ifa);
|
||||||
if (error)
|
if (error)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pAdapter = adapterInfo;
|
std::unique_ptr<ifaddrs, IfAdaptersDeleter> adapterInfo(ifa, IfAdaptersDeleter());
|
||||||
|
|
||||||
|
pAdapter = adapterInfo.get();
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -190,23 +192,24 @@ bool AdapterUtils::GetIfAdapter(const std::string& name, ifaddrs* adapter, ifadd
|
||||||
if (pAdapter != nullptr)
|
if (pAdapter != nullptr)
|
||||||
{
|
{
|
||||||
*adapter = *pAdapter;
|
*adapter = *pAdapter;
|
||||||
*buffer = adapterInfo;
|
buffer->swap(adapterInfo);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
freeifaddrs(adapterInfo);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool AdapterUtils::GetIfAdapterAuto(ifaddrs* adapter, ifaddrs** buffer)
|
bool AdapterUtils::GetIfAdapterAuto(ifaddrs* adapter, AdapterBuffer* buffer)
|
||||||
{
|
{
|
||||||
ifaddrs* adapterInfo;
|
ifaddrs* ifa;
|
||||||
ifaddrs* pAdapter;
|
ifaddrs* pAdapter;
|
||||||
|
|
||||||
int error = getifaddrs(&adapterInfo);
|
int error = getifaddrs(&ifa);
|
||||||
if (error)
|
if (error)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pAdapter = adapterInfo;
|
std::unique_ptr<ifaddrs, IfAdaptersDeleter> adapterInfo(ifa, IfAdaptersDeleter());
|
||||||
|
|
||||||
|
pAdapter = adapterInfo.get();
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -229,7 +232,7 @@ bool AdapterUtils::GetIfAdapterAuto(ifaddrs* adapter, ifaddrs** buffer)
|
||||||
if (hasIPv4 && hasGateway)
|
if (hasIPv4 && hasGateway)
|
||||||
{
|
{
|
||||||
*adapter = *pAdapter;
|
*adapter = *pAdapter;
|
||||||
*buffer = adapterInfo;
|
buffer->swap(adapterInfo);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,7 +240,6 @@ bool AdapterUtils::GetIfAdapterAuto(ifaddrs* adapter, ifaddrs** buffer)
|
||||||
pAdapter = pAdapter->ifa_next;
|
pAdapter = pAdapter->ifa_next;
|
||||||
} while (pAdapter);
|
} while (pAdapter);
|
||||||
|
|
||||||
freeifaddrs(adapterInfo);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -31,7 +31,8 @@
|
||||||
namespace AdapterUtils
|
namespace AdapterUtils
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
bool GetWin32Adapter(const std::string& name, PIP_ADAPTER_ADDRESSES adapter, std::unique_ptr<IP_ADAPTER_ADDRESSES[]>* buffer);
|
typedef std::unique_ptr<IP_ADAPTER_ADDRESSES[]> AdapterBuffer;
|
||||||
|
bool GetWin32Adapter(const std::string& name, PIP_ADAPTER_ADDRESSES adapter, AdapterBuffer* buffer);
|
||||||
bool GetWin32AdapterAuto(PIP_ADAPTER_ADDRESSES adapter, std::unique_ptr<IP_ADAPTER_ADDRESSES[]>* buffer);
|
bool GetWin32AdapterAuto(PIP_ADAPTER_ADDRESSES adapter, std::unique_ptr<IP_ADAPTER_ADDRESSES[]>* buffer);
|
||||||
|
|
||||||
std::optional<PacketReader::IP::IP_Address> GetAdapterIP(PIP_ADAPTER_ADDRESSES adapter);
|
std::optional<PacketReader::IP::IP_Address> GetAdapterIP(PIP_ADAPTER_ADDRESSES adapter);
|
||||||
|
@ -39,8 +40,13 @@ namespace AdapterUtils
|
||||||
std::vector<PacketReader::IP::IP_Address> GetGateways(PIP_ADAPTER_ADDRESSES adapter);
|
std::vector<PacketReader::IP::IP_Address> GetGateways(PIP_ADAPTER_ADDRESSES adapter);
|
||||||
std::vector<PacketReader::IP::IP_Address> GetDNS(PIP_ADAPTER_ADDRESSES adapter);
|
std::vector<PacketReader::IP::IP_Address> GetDNS(PIP_ADAPTER_ADDRESSES adapter);
|
||||||
#elif defined(__POSIX__)
|
#elif defined(__POSIX__)
|
||||||
bool GetIfAdapter(const std::string& name, ifaddrs* adapter, ifaddrs** buffer);
|
struct IfAdaptersDeleter
|
||||||
bool GetIfAdapterAuto(ifaddrs* adapter, ifaddrs** buffer);
|
{
|
||||||
|
void operator()(ifaddrs* buffer) const { freeifaddrs(buffer); }
|
||||||
|
};
|
||||||
|
typedef std::unique_ptr<ifaddrs, IfAdaptersDeleter> AdapterBuffer;
|
||||||
|
bool GetIfAdapter(const std::string& name, ifaddrs* adapter, AdapterBuffer* buffer);
|
||||||
|
bool GetIfAdapterAuto(ifaddrs* adapter, AdapterBuffer* buffer);
|
||||||
|
|
||||||
std::optional<PacketReader::IP::IP_Address> GetAdapterIP(ifaddrs* adapter);
|
std::optional<PacketReader::IP::IP_Address> GetAdapterIP(ifaddrs* adapter);
|
||||||
// Mask.
|
// Mask.
|
||||||
|
|
|
@ -311,7 +311,7 @@ PCAPAdapter::PCAPAdapter()
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
IP_ADAPTER_ADDRESSES adapter;
|
IP_ADAPTER_ADDRESSES adapter;
|
||||||
std::unique_ptr<IP_ADAPTER_ADDRESSES[]> buffer;
|
AdapterUtils::AdapterBuffer buffer;
|
||||||
if (AdapterUtils::GetWin32Adapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer))
|
if (AdapterUtils::GetWin32Adapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer))
|
||||||
InitInternalServer(&adapter);
|
InitInternalServer(&adapter);
|
||||||
else
|
else
|
||||||
|
@ -319,14 +319,12 @@ PCAPAdapter::PCAPAdapter()
|
||||||
Console.Error("DEV9: Failed to get adapter information");
|
Console.Error("DEV9: Failed to get adapter information");
|
||||||
InitInternalServer(nullptr);
|
InitInternalServer(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(__POSIX__)
|
#elif defined(__POSIX__)
|
||||||
ifaddrs adapter;
|
ifaddrs adapter;
|
||||||
ifaddrs* buffer;
|
AdapterUtils::AdapterBuffer buffer;
|
||||||
if (AdapterUtils::GetIfAdapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer))
|
if (AdapterUtils::GetIfAdapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer))
|
||||||
{
|
|
||||||
InitInternalServer(&adapter);
|
InitInternalServer(&adapter);
|
||||||
freeifaddrs(buffer);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.Error("DEV9: Failed to get adapter information");
|
Console.Error("DEV9: Failed to get adapter information");
|
||||||
|
@ -383,19 +381,16 @@ void PCAPAdapter::reloadSettings()
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
IP_ADAPTER_ADDRESSES adapter;
|
IP_ADAPTER_ADDRESSES adapter;
|
||||||
std::unique_ptr<IP_ADAPTER_ADDRESSES[]> buffer;
|
AdapterUtils::AdapterBuffer buffer;
|
||||||
if (AdapterUtils::GetWin32Adapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer))
|
if (AdapterUtils::GetWin32Adapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer))
|
||||||
ReloadInternalServer(&adapter);
|
ReloadInternalServer(&adapter);
|
||||||
else
|
else
|
||||||
ReloadInternalServer(nullptr);
|
ReloadInternalServer(nullptr);
|
||||||
#elif defined(__POSIX__)
|
#elif defined(__POSIX__)
|
||||||
ifaddrs adapter;
|
ifaddrs adapter;
|
||||||
ifaddrs* buffer;
|
AdapterUtils::AdapterBuffer buffer;
|
||||||
if (AdapterUtils::GetIfAdapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer))
|
if (AdapterUtils::GetIfAdapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer))
|
||||||
{
|
|
||||||
ReloadInternalServer(&adapter);
|
ReloadInternalServer(&adapter);
|
||||||
freeifaddrs(buffer);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
ReloadInternalServer(nullptr);
|
ReloadInternalServer(nullptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -162,7 +162,7 @@ SocketAdapter::SocketAdapter()
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
IP_ADAPTER_ADDRESSES adapter;
|
IP_ADAPTER_ADDRESSES adapter;
|
||||||
std::unique_ptr<IP_ADAPTER_ADDRESSES[]> buffer;
|
AdapterUtils::AdapterBuffer buffer;
|
||||||
|
|
||||||
if (strcmp(EmuConfig.DEV9.EthDevice.c_str(), "Auto") != 0)
|
if (strcmp(EmuConfig.DEV9.EthDevice.c_str(), "Auto") != 0)
|
||||||
{
|
{
|
||||||
|
@ -196,7 +196,7 @@ SocketAdapter::SocketAdapter()
|
||||||
}
|
}
|
||||||
#elif defined(__POSIX__)
|
#elif defined(__POSIX__)
|
||||||
ifaddrs adapter;
|
ifaddrs adapter;
|
||||||
ifaddrs* buffer;
|
AdapterUtils::AdapterBuffer buffer;
|
||||||
|
|
||||||
if (strcmp(EmuConfig.DEV9.EthDevice.c_str(), "Auto") != 0)
|
if (strcmp(EmuConfig.DEV9.EthDevice.c_str(), "Auto") != 0)
|
||||||
{
|
{
|
||||||
|
@ -214,7 +214,6 @@ SocketAdapter::SocketAdapter()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.Error("DEV9: Socket: Failed To Get Adapter IP");
|
Console.Error("DEV9: Socket: Failed To Get Adapter IP");
|
||||||
freeifaddrs(buffer);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -239,9 +238,6 @@ SocketAdapter::SocketAdapter()
|
||||||
const IP_Address gateway = internalIP;
|
const IP_Address gateway = internalIP;
|
||||||
|
|
||||||
InitInternalServer(&adapter, true, ps2IP, subnet, gateway);
|
InitInternalServer(&adapter, true, ps2IP, subnet, gateway);
|
||||||
#ifdef __POSIX__
|
|
||||||
freeifaddrs(buffer);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
u8 hostMAC[6];
|
u8 hostMAC[6];
|
||||||
u8 newMAC[6];
|
u8 newMAC[6];
|
||||||
|
@ -433,7 +429,7 @@ void SocketAdapter::reloadSettings()
|
||||||
bool foundAdapter = false;
|
bool foundAdapter = false;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
IP_ADAPTER_ADDRESSES adapter;
|
IP_ADAPTER_ADDRESSES adapter;
|
||||||
std::unique_ptr<IP_ADAPTER_ADDRESSES[]> buffer;
|
AdapterUtils::AdapterBuffer buffer;
|
||||||
|
|
||||||
if (strcmp(EmuConfig.DEV9.EthDevice.c_str(), "Auto") != 0)
|
if (strcmp(EmuConfig.DEV9.EthDevice.c_str(), "Auto") != 0)
|
||||||
foundAdapter = AdapterUtils::GetWin32Adapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer);
|
foundAdapter = AdapterUtils::GetWin32Adapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer);
|
||||||
|
@ -442,7 +438,7 @@ void SocketAdapter::reloadSettings()
|
||||||
|
|
||||||
#elif defined(__POSIX__)
|
#elif defined(__POSIX__)
|
||||||
ifaddrs adapter;
|
ifaddrs adapter;
|
||||||
ifaddrs* buffer;
|
AdapterUtils::AdapterBuffer buffer;
|
||||||
|
|
||||||
if (strcmp(EmuConfig.DEV9.EthDevice.c_str(), "Auto") != 0)
|
if (strcmp(EmuConfig.DEV9.EthDevice.c_str(), "Auto") != 0)
|
||||||
foundAdapter = AdapterUtils::GetIfAdapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer);
|
foundAdapter = AdapterUtils::GetIfAdapter(EmuConfig.DEV9.EthDevice, &adapter, &buffer);
|
||||||
|
@ -455,12 +451,7 @@ void SocketAdapter::reloadSettings()
|
||||||
const IP_Address gateway = internalIP;
|
const IP_Address gateway = internalIP;
|
||||||
|
|
||||||
if (foundAdapter)
|
if (foundAdapter)
|
||||||
{
|
|
||||||
ReloadInternalServer(&adapter, true, ps2IP, subnet, gateway);
|
ReloadInternalServer(&adapter, true, ps2IP, subnet, gateway);
|
||||||
#ifdef __POSIX__
|
|
||||||
freeifaddrs(buffer);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pxAssert(false);
|
pxAssert(false);
|
||||||
|
|
Loading…
Reference in New Issue