in source/sigv4.c [1165:1210]
static int32_t cmpQueryFieldValue( const void * pFirstVal,
const void * pSecondVal )
{
const SigV4KeyValuePair_t * pFirst, * pSecond = NULL;
size_t lenSmall = 0U;
int32_t compResult = -1;
assert( pFirstVal != NULL );
assert( pSecondVal != NULL );
pFirst = ( const SigV4KeyValuePair_t * ) pFirstVal;
pSecond = ( const SigV4KeyValuePair_t * ) pSecondVal;
assert( ( pFirst->key.pData != NULL ) && ( pFirst->key.dataLen != 0U ) );
assert( ( pSecond->key.pData != NULL ) && ( pSecond->key.dataLen != 0U ) );
lenSmall = ( pFirst->key.dataLen < pSecond->key.dataLen ) ? pFirst->key.dataLen : pSecond->key.dataLen;
compResult = ( int32_t ) strncmp( pFirst->key.pData,
pSecond->key.pData,
lenSmall );
if( compResult == 0 )
{
if( pFirst->key.dataLen == pSecond->key.dataLen )
{
/* The fields are equal, so sorting must be done by value. */
lenSmall = ( pFirst->value.dataLen < pSecond->value.dataLen ) ? pFirst->value.dataLen : pSecond->value.dataLen;
compResult = ( int32_t ) strncmp( pFirst->value.pData,
pSecond->value.pData,
lenSmall );
}
else
{
/* Fields share a common prefix, so the shorter one should come first. */
compResult = ( pFirst->key.dataLen < pSecond->key.dataLen ) ? -1 : 1;
}
}
if( ( compResult == 0 ) && ( pFirst->value.dataLen != pSecond->value.dataLen ) )
{
/* Values share a common prefix, so the shorter one should come first. */
compResult = ( pFirst->value.dataLen < pSecond->value.dataLen ) ? -1 : 1;
}
return compResult;
}