BUG: Do not use std::string to accumulate output. Use std::vector instead. This is much better at memory management.
This commit is contained in:
parent
6018ebdc85
commit
945fcb581d
|
@ -2432,6 +2432,7 @@ int cmCTest::RunMakeCommand(const char* command, std::string* output,
|
|||
|
||||
int cmCTest::RunTest(std::vector<const char*> argv, std::string* output, int *retVal)
|
||||
{
|
||||
std::vector<char> tempOutput;
|
||||
if ( output )
|
||||
{
|
||||
*output = "";
|
||||
|
@ -2454,7 +2455,7 @@ int cmCTest::RunTest(std::vector<const char*> argv, std::string* output, int *re
|
|||
{
|
||||
if ( output )
|
||||
{
|
||||
output->append(data, length);
|
||||
tempOutput.insert(tempOutput.end(), data, data+length);
|
||||
}
|
||||
if ( m_Verbose )
|
||||
{
|
||||
|
@ -2464,6 +2465,10 @@ int cmCTest::RunTest(std::vector<const char*> argv, std::string* output, int *re
|
|||
}
|
||||
|
||||
cmsysProcess_WaitForExit(cp, 0);
|
||||
if(output)
|
||||
{
|
||||
output->append(&*tempOutput.begin(), tempOutput.size());
|
||||
}
|
||||
|
||||
int result = cmsysProcess_GetState(cp);
|
||||
|
||||
|
|
|
@ -400,6 +400,7 @@ bool cmSystemTools::RunSingleCommand(
|
|||
cmsysProcess_SetTimeout(cp, timeout);
|
||||
cmsysProcess_Execute(cp);
|
||||
|
||||
std::vector<char> tempOutput;
|
||||
char* data;
|
||||
int length;
|
||||
while(cmsysProcess_WaitForData(cp, (cmsysProcess_Pipe_STDOUT |
|
||||
|
@ -408,7 +409,7 @@ bool cmSystemTools::RunSingleCommand(
|
|||
{
|
||||
if ( output )
|
||||
{
|
||||
output->append(data, length);
|
||||
tempOutput.insert(tempOutput.end(), data, data+length);
|
||||
}
|
||||
if(verbose)
|
||||
{
|
||||
|
@ -417,6 +418,10 @@ bool cmSystemTools::RunSingleCommand(
|
|||
}
|
||||
|
||||
cmsysProcess_WaitForExit(cp, 0);
|
||||
if ( output )
|
||||
{
|
||||
output->append(&*tempOutput.begin(), tempOutput.size());
|
||||
}
|
||||
|
||||
bool result = true;
|
||||
if(cmsysProcess_GetState(cp) == cmsysProcess_State_Exited)
|
||||
|
|
Loading…
Reference in New Issue