static int32_t cmpQueryFieldValue()

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