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)

This commit is contained in:
Brad King 2007-10-15 17:38:10 -04:00
parent b63ff2fb6f
commit 583aff2577
1 changed files with 22 additions and 2 deletions

View File

@ -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);
}