|
@@ -28,6 +28,8 @@ static bool cmExecuteProcessCommandIsWhitespace(char c)
|
|
|
|
|
|
void cmExecuteProcessCommandFixText(std::vector<char>& output,
|
|
|
bool strip_trailing_whitespace);
|
|
|
+void cmExecuteProcessCommandAppend(std::vector<char>& output,
|
|
|
+ const char* data, int length);
|
|
|
|
|
|
// cmExecuteProcessCommand
|
|
|
bool cmExecuteProcessCommand
|
|
@@ -305,14 +307,14 @@ bool cmExecuteProcessCommand
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- tempOutput.insert(tempOutput.end(), data, data+length);
|
|
|
+ cmExecuteProcessCommandAppend(tempOutput, data, length);
|
|
|
}
|
|
|
}
|
|
|
else if(p == cmsysProcess_Pipe_STDERR && !error_quiet)
|
|
|
{
|
|
|
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.
|
|
|
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);
|
|
|
+}
|