RSSL_INIT_ENCODE_ITERATOR missing initializer

vishal.anand
vishal.anand Contributor

The RsslEncodeIterator structure is RTSDK 2.0.6


typedef struct RsslEncIterator

{

RsslBuffer *_pBuffer; /*!< Buffer to encode into, should be set with rsslSetEncodeIteratorBuffer(). RsslBuffer::length should indicate the number of bytes available.*/

char *_curBufPtr; /*!< The current encoding position in the associated buffer */

char *_endBufPtr; /*!< The end of the buffer for encoding, used to ensure that encoding functions do not go past end of buffer */

RsslUInt8 _majorVersion; /*!< RWF Major Version this iterator will encode, should be set with rsslSetEncodeIteratorRWFVersion() */

RsslUInt8 _minorVersion; /*!< RWF Minor Version this iterator will encode, should be set with rsslSetEncodeIteratorRWFVersion() */

RsslInt8 _encodingLevel; /*!< Current nesting level */

RsslEncodingLevel _levelInfo[RSSL_ITER_MAX_LEVELS]; /*!< Information needed for encoding across all levels */

RsslElementSetDefDb *_pGlobalElemListSetDb; /*!< Pointer to a global set definition for element lists.*/

RsslFieldSetDefDb *_pGlobalFieldListSetDb; /*!< Pointer to a global set definition for field lists.*/

} RsslEncodeIterator;



However the RSSL_INIT_ENCODE_ITERATOR is missing initializer for _pGlobalElemListSetDb and _pGlobalElemListSetDb . Is that an error or purposley left out? Compiler is giving warning for missing initialieers.



#define RSSL_INIT_ENCODE_ITERATOR { 0, 0, 0, RSSL_RWF_MAJOR_VERSION, RSSL_RWF_MINOR_VERSION, -1, { \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL, \

RSSL_INIT_ENCODING_LEVEL \

}}

Welcome!

It looks like you're new here. Sign in or register to get started.

Best Answer

Answers

  • Jirapongse
    Jirapongse ✭✭✭✭✭

    @vishal.anand

    Thank you for reporting this issue.

    Yes, you are correct. I have submitted this issue (#205) on GitHub.


  • Thanks. These are pointer variables? Should I for now explicitly set them to NULL? Can it be dangerous to go without initializing them?
  • Jirapongse
    Jirapongse ✭✭✭✭✭

    @vishal.anand

    You can call the rsslClearEncodeIterator method instead.

    RTR_C_ALWAYS_INLINE void rsslClearEncodeIterator( RsslEncodeIterator *pIter)
    {
        pIter->_encodingLevel = -1;
        pIter->_pBuffer = 0;
        pIter->_majorVersion = RSSL_RWF_MAJOR_VERSION;  //This should be initialized to the MAJOR version of RWF being encoded
        pIter->_minorVersion = RSSL_RWF_MINOR_VERSION;  // This should be initialized to the MINOR version of RWF being encoded
        pIter->_pGlobalFieldListSetDb = NULL;
        pIter->_pGlobalElemListSetDb = NULL;
    }

    Otherwise, you can define a new macro to set _pGlobalElemListSetDb and _pGlobalFieldListSetDb variables to 0 (NULL).

    #define RSSL_INIT_ENCODE_ITERATOR_NEW  { 0, 0, 0, RSSL_RWF_MAJOR_VERSION, RSSL_RWF_MINOR_VERSION, -1, { \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL, \
        RSSL_INIT_ENCODING_LEVEL \
    }, 0,0}
  • Thanks for the answer. I am doing that now and it compiles with warnings.

Welcome!

It looks like you're new here. Sign in or register to get started.

Welcome!

It looks like you're new here. Sign in or register to get started.