TNetwork::SplitLoad: Use managed memory

This commit is contained in:
Lion Kortlepel
2022-05-29 14:30:57 +02:00
parent a5153e4bc1
commit d8526f0649
+7 -9
View File
@@ -756,11 +756,11 @@ void TNetwork::SendFile(TClient& c, const std::string& UnsafeName) {
void TNetwork::SplitLoad(TClient& c, size_t Sent, size_t Size, bool D, const std::string& Name) { void TNetwork::SplitLoad(TClient& c, size_t Sent, size_t Size, bool D, const std::string& Name) {
std::ifstream f(Name.c_str(), std::ios::binary); std::ifstream f(Name.c_str(), std::ios::binary);
uint32_t Split = 0x7735940; // 125MB uint32_t Split = 0x7735940; // 125MB
char* Data; std::vector<char> Data;
if (Size > Split) if (Size > Split)
Data = new char[Split]; Data.resize(Split);
else else
Data = new char[Size]; Data.resize(Size);
SOCKET TCPSock; SOCKET TCPSock;
if (D) if (D)
TCPSock = c.GetDownSock(); TCPSock = c.GetDownSock();
@@ -771,8 +771,8 @@ void TNetwork::SplitLoad(TClient& c, size_t Sent, size_t Size, bool D, const std
size_t Diff = Size - Sent; size_t Diff = Size - Sent;
if (Diff > Split) { if (Diff > Split) {
f.seekg(Sent, std::ios_base::beg); f.seekg(Sent, std::ios_base::beg);
f.read(Data, Split); f.read(Data.data(), Split);
if (!TCPSendRaw(c, TCPSock, Data, Split)) { if (!TCPSendRaw(c, TCPSock, Data.data(), Split)) {
if (c.GetStatus() > -1) if (c.GetStatus() > -1)
c.SetStatus(-1); c.SetStatus(-1);
break; break;
@@ -780,8 +780,8 @@ void TNetwork::SplitLoad(TClient& c, size_t Sent, size_t Size, bool D, const std
Sent += Split; Sent += Split;
} else { } else {
f.seekg(Sent, std::ios_base::beg); f.seekg(Sent, std::ios_base::beg);
f.read(Data, Diff); f.read(Data.data(), Diff);
if (!TCPSendRaw(c, TCPSock, Data, int32_t(Diff))) { if (!TCPSendRaw(c, TCPSock, Data.data(), int32_t(Diff))) {
if (c.GetStatus() > -1) if (c.GetStatus() > -1)
c.SetStatus(-1); c.SetStatus(-1);
break; break;
@@ -789,8 +789,6 @@ void TNetwork::SplitLoad(TClient& c, size_t Sent, size_t Size, bool D, const std
Sent += Diff; Sent += Diff;
} }
} }
delete[] Data;
f.close();
} }
bool TNetwork::TCPSendRaw(TClient& C, SOCKET socket, char* Data, int32_t Size) { bool TNetwork::TCPSendRaw(TClient& C, SOCKET socket, char* Data, int32_t Size) {