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:
Brad King 2003-11-26 11:41:57 -05:00
parent 6018ebdc85
commit 945fcb581d
2 changed files with 12 additions and 2 deletions

View File

@ -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);

View File

@ -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)