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