diff --git a/pcsx2/DEV9/pcap_io.cpp b/pcsx2/DEV9/pcap_io.cpp index 8c216d58f1..1a1a57de90 100644 --- a/pcsx2/DEV9/pcap_io.cpp +++ b/pcsx2/DEV9/pcap_io.cpp @@ -14,6 +14,7 @@ */ #include "PrecompiledHeader.h" +#include #ifdef _WIN32 #include @@ -54,12 +55,12 @@ mac_address host_mac; //IP_ADAPTER_ADDRESSES is a structure that contains ptrs to data in other regions //of the buffer, se we need to return both so the caller can free the buffer //after it's finished reading the needed data from IP_ADAPTER_ADDRESSES -bool GetWin32Adapter(const char* name, PIP_ADAPTER_ADDRESSES adapter, PIP_ADAPTER_ADDRESSES* buffer) +bool GetWin32Adapter(const char* name, PIP_ADAPTER_ADDRESSES adapter, std::unique_ptr* buffer) { const int guidindex = strlen("\\Device\\NPF_"); int neededSize = 128; - PIP_ADAPTER_ADDRESSES AdapterInfo = new IP_ADAPTER_ADDRESSES[neededSize]; + std::unique_ptr AdapterInfo = std::make_unique(neededSize); ULONG dwBufLen = sizeof(IP_ADAPTER_ADDRESSES) * neededSize; PIP_ADAPTER_ADDRESSES pAdapterInfo; @@ -68,15 +69,14 @@ bool GetWin32Adapter(const char* name, PIP_ADAPTER_ADDRESSES adapter, PIP_ADAPTE AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, - AdapterInfo, + AdapterInfo.get(), &dwBufLen); if (dwStatus == ERROR_BUFFER_OVERFLOW) { DevCon.WriteLn("GetWin32Adapter() buffer too small, resizing"); - delete[] AdapterInfo; neededSize = dwBufLen / sizeof(IP_ADAPTER_ADDRESSES) + 1; - AdapterInfo = new IP_ADAPTER_ADDRESSES[neededSize]; + AdapterInfo = std::make_unique(neededSize); dwBufLen = sizeof(IP_ADAPTER_ADDRESSES) * neededSize; DevCon.WriteLn("New size %i", neededSize); @@ -84,27 +84,25 @@ bool GetWin32Adapter(const char* name, PIP_ADAPTER_ADDRESSES adapter, PIP_ADAPTE AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, - AdapterInfo, + AdapterInfo.get(), &dwBufLen); } if (dwStatus != ERROR_SUCCESS) return false; - pAdapterInfo = AdapterInfo; + pAdapterInfo = AdapterInfo.get(); do { if (0 == strcmp(pAdapterInfo->AdapterName, &name[guidindex])) { *adapter = *pAdapterInfo; - *buffer = AdapterInfo; + buffer->swap(AdapterInfo); return true; } pAdapterInfo = pAdapterInfo->Next; } while (pAdapterInfo); - - delete[] AdapterInfo; return false; } #endif @@ -115,12 +113,11 @@ int GetMACAddress(char* adapter, mac_address* addr) int retval = 0; #ifdef _WIN32 IP_ADAPTER_ADDRESSES adapterInfo; - PIP_ADAPTER_ADDRESSES buffer; + std::unique_ptr buffer; if (GetWin32Adapter(adapter, &adapterInfo, &buffer)) { memcpy(addr, adapterInfo.PhysicalAddress, 6); - delete[] buffer; retval = 1; } @@ -405,13 +402,10 @@ std::vector PCAPAdapter::GetAdapters() entry.guid = std::wstring(wEth); IP_ADAPTER_ADDRESSES adapterInfo; - PIP_ADAPTER_ADDRESSES buffer; + std::unique_ptr buffer; if (GetWin32Adapter(d->name, &adapterInfo, &buffer)) - { entry.name = std::wstring(adapterInfo.FriendlyName); - delete[] buffer; - } else { //have to use description