Jelajahi Sumber

BUG: Work around bug when calling insert on an empty vector of char on midworld. Should eliminate the sporadic failure of EXECUTE_PROCESS during the SimpleInstall-Stage2 test. (david.cole from Brad's checkout on midworld)

Brad King 18 tahun lalu
induk
melakukan
583aff2577
1 mengubah file dengan 22 tambahan dan 2 penghapusan
  1. 22 2
      Source/cmExecuteProcessCommand.cxx

+ 22 - 2
Source/cmExecuteProcessCommand.cxx

@@ -28,6 +28,8 @@ static bool cmExecuteProcessCommandIsWhitespace(char c)
 
 
 void cmExecuteProcessCommandFixText(std::vector<char>& output,
 void cmExecuteProcessCommandFixText(std::vector<char>& output,
                                     bool strip_trailing_whitespace);
                                     bool strip_trailing_whitespace);
+void cmExecuteProcessCommandAppend(std::vector<char>& output,
+                                   const char* data, int length);
 
 
 // cmExecuteProcessCommand
 // cmExecuteProcessCommand
 bool cmExecuteProcessCommand
 bool cmExecuteProcessCommand
@@ -305,14 +307,14 @@ bool cmExecuteProcessCommand
         }
         }
       else
       else
         {
         {
-        tempOutput.insert(tempOutput.end(), data, data+length);
+        cmExecuteProcessCommandAppend(tempOutput, data, length);
         }
         }
       }
       }
     else if(p == cmsysProcess_Pipe_STDERR && !error_quiet)
     else if(p == cmsysProcess_Pipe_STDERR && !error_quiet)
       {
       {
       if(!error_variable.empty())
       if(!error_variable.empty())
         {
         {
-        tempError.insert(tempError.end(), data, data+length);
+        cmExecuteProcessCommandAppend(tempError, data, length);
         }
         }
       }
       }
     }
     }
@@ -405,3 +407,21 @@ void cmExecuteProcessCommandFixText(std::vector<char>& output,
   // Put a terminator on the text string.
   // Put a terminator on the text string.
   output.push_back('\0');
   output.push_back('\0');
 }
 }
+
+//----------------------------------------------------------------------------
+void cmExecuteProcessCommandAppend(std::vector<char>& output,
+                                   const char* data, int length)
+{
+#if defined(__APPLE__)
+  // HACK on Apple to work around bug with inserting at the
+  // end of an empty vector.  This resulted in random failures
+  // that were hard to reproduce.
+  if(output.empty() && length > 0)
+    {
+    output.push_back(data[0]);
+    ++data;
+    --length;
+    }
+#endif
+  output.insert(output.end(), data, data+length);
+}