Browse Source

BUG: Do not use std::string to accumulate output. Use std::vector instead. This is much better at memory management.

Brad King 22 years ago
parent
commit
945fcb581d
2 changed files with 12 additions and 2 deletions
  1. 6 1
      Source/cmCTest.cxx
  2. 6 1
      Source/cmSystemTools.cxx

+ 6 - 1
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);
 

+ 6 - 1
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)