in source/sigv4.c [1951:1995]
static SigV4Status_t writeValueInCanonicalizedQueryString( char * pBufCur,
size_t bufferLen,
const char * pValue,
size_t valueLen,
size_t * pEncodedLen,
const bool doubleEncodeEqualsInParmsValues )
{
SigV4Status_t returnStatus = SigV4Success;
size_t valueBytesWritten = 0U;
assert( pBufCur != NULL );
assert( pEncodedLen != NULL );
assert( ( pValue == NULL ) || ( valueLen != 0U ) );
/* Check that there is space at least for the equals to character. */
if( bufferLen < 1U )
{
LOG_INSUFFICIENT_MEMORY_ERROR( "write '=' query parameter separator", 1U );
returnStatus = SigV4InsufficientMemory;
}
else
{
*pBufCur = '=';
*pEncodedLen = 1U;
valueBytesWritten = bufferLen - 1U;
/* Encode parameter value if non-empty. Query parameters can have empty values. */
if( valueLen > 0U )
{
returnStatus = SigV4_EncodeURI( pValue,
valueLen,
&( pBufCur[ 1 ] ),
&valueBytesWritten,
true /* Encode slash (/) */,
doubleEncodeEqualsInParmsValues );
if( returnStatus == SigV4Success )
{
*pEncodedLen += valueBytesWritten;
}
}
}
return returnStatus;
}