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:
parent
b63ff2fb6f
commit
583aff2577
|
@ -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);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue