summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2003-11-26 11:41:57 -0500
committerBrad King <brad.king@kitware.com>2003-11-26 11:41:57 -0500
commit945fcb581d2c8f21bd9bc077ccf505ee058fa81d (patch)
tree12aaa78d0f6ef3707b1abe3240d5f6bbbadd108e /Source
parent6018ebdc8558573aa307334f3b6d9a91aa3be533 (diff)
downloadcmake-945fcb581d2c8f21bd9bc077ccf505ee058fa81d.tar.gz
BUG: Do not use std::string to accumulate output. Use std::vector instead. This is much better at memory management.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmCTest.cxx7
-rw-r--r--Source/cmSystemTools.cxx7
2 files changed, 12 insertions, 2 deletions
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index 4b63ad8fc5..4689a18dfa 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 1e2de6e3e3..1d12ac9d21 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)