static SigV4Status_t writeValueInCanonicalizedQueryString()

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