From 583aff257700b0de3f467a76abc182cead34dd2d Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 15 Oct 2007 17:38:10 -0400 Subject: 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) --- Source/cmExecuteProcessCommand.cxx | 24 ++++++++++++++++++++++-- 1 file 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& output, bool strip_trailing_whitespace); +void cmExecuteProcessCommandAppend(std::vector& 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& output, // Put a terminator on the text string. output.push_back('\0'); } + +//---------------------------------------------------------------------------- +void cmExecuteProcessCommandAppend(std::vector& 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); +} -- cgit v0.12