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 \

}}

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.