diff options
author | Brad King <brad.king@kitware.com> | 2003-11-26 16:41:57 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2003-11-26 16:41:57 (GMT) |
commit | 945fcb581d2c8f21bd9bc077ccf505ee058fa81d (patch) | |
tree | 12aaa78d0f6ef3707b1abe3240d5f6bbbadd108e | |
parent | 6018ebdc8558573aa307334f3b6d9a91aa3be533 (diff) | |
download | CMake-945fcb581d2c8f21bd9bc077ccf505ee058fa81d.zip CMake-945fcb581d2c8f21bd9bc077ccf505ee058fa81d.tar.gz CMake-945fcb581d2c8f21bd9bc077ccf505ee058fa81d.tar.bz2 |
BUG: Do not use std::string to accumulate output. Use std::vector instead. This is much better at memory management.
-rw-r--r-- | Source/cmCTest.cxx | 7 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 7 |
2 files changed, 12 insertions, 2 deletions
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index 4b63ad8..4689a18 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -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); diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 1e2de6e..1d12ac9 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -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) |