diff options
Diffstat (limited to 'Source/cmExecuteProcessCommand.cxx')
-rw-r--r-- | Source/cmExecuteProcessCommand.cxx | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/Source/cmExecuteProcessCommand.cxx b/Source/cmExecuteProcessCommand.cxx index 767690f..c437ac9 100644 --- a/Source/cmExecuteProcessCommand.cxx +++ b/Source/cmExecuteProcessCommand.cxx @@ -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); +} |