Modernize memory management

Update internals of various classes
This commit is contained in:
Marc Chevrier
2020-02-26 15:52:47 +01:00
parent ab2d170c74
commit 557cecdc3d
17 changed files with 126 additions and 138 deletions

View File

@@ -5,6 +5,9 @@
#include <cstring>
#include <iostream>
#include <sstream>
#include <utility>
#include <cm/memory>
#include "cmCommandArgumentLexer.h"
#include "cmMakefile.h"
@@ -40,10 +43,10 @@ const char* cmCommandArgumentParserHelper::AddString(const std::string& str)
if (str.empty()) {
return "";
}
char* stVal = new char[str.size() + 1];
strcpy(stVal, str.c_str());
this->Variables.push_back(stVal);
return stVal;
auto stVal = cm::make_unique<char[]>(str.size() + 1);
strcpy(stVal.get(), str.c_str());
this->Variables.push_back(std::move(stVal));
return this->Variables.back().get();
}
const char* cmCommandArgumentParserHelper::ExpandSpecialVariable(
@@ -136,11 +139,11 @@ const char* cmCommandArgumentParserHelper::CombineUnions(const char* in1,
return in1;
}
size_t len = strlen(in1) + strlen(in2) + 1;
char* out = new char[len];
strcpy(out, in1);
strcat(out, in2);
this->Variables.push_back(out);
return out;
auto out = cm::make_unique<char[]>(len);
strcpy(out.get(), in1);
strcat(out.get(), in2);
this->Variables.push_back(std::move(out));
return this->Variables.back().get();
}
void cmCommandArgumentParserHelper::AllocateParserType(
@@ -153,11 +156,11 @@ void cmCommandArgumentParserHelper::AllocateParserType(
if (len == 0) {
return;
}
char* out = new char[len + 1];
memcpy(out, str, len);
out[len] = 0;
pt->str = out;
this->Variables.push_back(out);
auto out = cm::make_unique<char[]>(len + 1);
memcpy(out.get(), str, len);
out.get()[len] = 0;
pt->str = out.get();
this->Variables.push_back(std::move(out));
}
bool cmCommandArgumentParserHelper::HandleEscapeSymbol(
@@ -235,10 +238,7 @@ int cmCommandArgumentParserHelper::ParseString(const char* str, int verb)
void cmCommandArgumentParserHelper::CleanupParser()
{
for (char* var : this->Variables) {
delete[] var;
}
this->Variables.erase(this->Variables.begin(), this->Variables.end());
this->Variables.clear();
}
int cmCommandArgumentParserHelper::LexInput(char* buf, int maxlen)