in source/defender-tools/report_builder.c [365:440]
static eReportBuilderStatus prvWriteTaskIdsArray( char * pcBuffer,
uint32_t ulBufferLength,
const uint32_t * pulTaskIdsArray,
uint32_t pulTaskIdsArrayLength,
uint32_t * pulOutCharsWritten )
{
char * pcCurrentWritePos = pcBuffer;
uint32_t i, ulRemainingBufferLength = ulBufferLength;
int32_t lCharactersWritten;
eReportBuilderStatus eStatus = eReportBuilderSuccess;
configASSERT( pcBuffer != NULL );
configASSERT( pulTaskIdsArray != NULL );
configASSERT( pulOutCharsWritten != NULL );
/* Write the JSON array open marker. */
if( ulRemainingBufferLength > 1 )
{
*pcCurrentWritePos = reportbuilderJSON_ARRAY_OPEN_MARKER;
ulRemainingBufferLength -= 1;
pcCurrentWritePos += 1;
}
else
{
eStatus = eReportBuilderBufferTooSmall;
}
/* Write the array elements. */
for( i = 0; ( ( i < pulTaskIdsArrayLength ) && ( eStatus == eReportBuilderSuccess ) ); i++ )
{
lCharactersWritten = snprintf( pcCurrentWritePos,
ulRemainingBufferLength,
"%lu,",
pulTaskIdsArray[ i ] );
if( !reportbuilderSNPRINTF_SUCCESS( lCharactersWritten, ulRemainingBufferLength ) )
{
eStatus = eReportBuilderBufferTooSmall;
break;
}
else
{
ulRemainingBufferLength -= ( uint32_t ) lCharactersWritten;
pcCurrentWritePos += lCharactersWritten;
}
}
if( eStatus == eReportBuilderSuccess )
{
/* Discard the last comma. */
if( pulTaskIdsArrayLength > 0 )
{
pcCurrentWritePos -= 1;
ulRemainingBufferLength += 1;
}
/* Write the JSON array close marker. */
if( ulRemainingBufferLength > 1 )
{
*pcCurrentWritePos = reportbuilderJSON_ARRAY_CLOSE_MARKER;
ulRemainingBufferLength -= 1;
pcCurrentWritePos += 1;
}
else
{
eStatus = eReportBuilderBufferTooSmall;
}
}
if( eStatus == eReportBuilderSuccess )
{
*pulOutCharsWritten = ulBufferLength - ulRemainingBufferLength;
}
return eStatus;
}