<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16999">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">csn1: Fix pedantic compiler warnings in csn.1 dissectors<br><br>Port of wireshark.git commit 6aca10831f86c562970b13efa811f46e25ee3091.<br><br>    From Mike Morrin:<br>    Fix pedantic compiler warnings in csn.1 dissectors.<br><br>    There is some tricky casting going on in csn.1 structures.  To eliminate all<br>    the warnings, the function pointers needed to be moved out of the object<br>    pointer unions.  Fortunately macros (mostly) hide these changes from the<br>    protocol dissector tables.<br><br>    https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7686<br><br>    svn path=/trunk/; revision=44899<br><br>Change-Id: Ia1a8c50c4b024ca6df4e3fbbf891cd33591ccc9b<br>---<br>M src/csn1.cpp<br>M src/csn1.h<br>2 files changed, 58 insertions(+), 56 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/csn1.cpp b/src/csn1.cpp</span><br><span>index 8e123fb..493d471 100644</span><br><span>--- a/src/csn1.cpp</span><br><span>+++ b/src/csn1.cpp</span><br><span>@@ -335,7 +335,7 @@</span><br><span>         guint8  no_of_bits  = (guint8) pDescr->i;</span><br><span>         guint16 nCount = (guint16)pDescr->descr.value; /* nCount supplied by value i.e. M_UINT_ARRAY(...) */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (pDescr->serialize.value != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        if (pDescr->format_p.value != 0)</span><br><span>         { /* nCount specified by a reference to field holding value i.e. M_VAR_UINT_ARRAY(...) */</span><br><span>           nCount = *pui16DATA(data, nCount);</span><br><span>         }</span><br><span>@@ -382,7 +382,7 @@</span><br><span>         gint16      Status;</span><br><span>         csnStream_t arT    = *ar;</span><br><span>         gint16      nCount = pDescr->i;</span><br><span style="color: hsl(0, 100%, 40%);">-        guint16      nSize  = (guint16)(gint32)pDescr->serialize.value;</span><br><span style="color: hsl(120, 100%, 40%);">+        guint16      nSize  = (guint16)(gint32)pDescr->format_p.value;</span><br><span> </span><br><span>         pui8 = pui8DATA(data, pDescr->offset);</span><br><span>         if (pDescr->type == CSN_VARIABLE_TARRAY)</span><br><span>@@ -539,7 +539,7 @@</span><br><span> </span><br><span>       case CSN_SERIALIZE:</span><br><span>       {</span><br><span style="color: hsl(0, 100%, 40%);">-        StreamSerializeFcn_t serialize = pDescr->serialize.fcn;</span><br><span style="color: hsl(120, 100%, 40%);">+        StreamSerializeFcn_t serialize = (StreamSerializeFcn_t)pDescr->aux_fn;</span><br><span>         csnStream_t          arT       = *ar;</span><br><span>         guint8 length_len              = pDescr->i;</span><br><span>         gint16               Status    = -1;</span><br><span>@@ -762,7 +762,7 @@</span><br><span>             guint8  no_of_bits  = (guint8) pDescr->i;</span><br><span>             guint16 nCount = (guint16)pDescr->descr.value; /* nCount supplied by value i.e. M_UINT_ARRAY(...) */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            if (pDescr->serialize.value != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            if (pDescr->format_p.value != 0)</span><br><span>             { /* nCount specified by a reference to field holding value i.e. M_VAR_UINT_ARRAY(...) */</span><br><span>               nCount = *pui16DATA(data, nCount);</span><br><span>             }</span><br><span>@@ -821,7 +821,7 @@</span><br><span>             gint16      Status;</span><br><span>             csnStream_t arT    = *ar;</span><br><span>             guint16      nCount = (guint16) pDescr->i;</span><br><span style="color: hsl(0, 100%, 40%);">-            guint16      nSize  = (guint16)(guint32)pDescr->serialize.value;</span><br><span style="color: hsl(120, 100%, 40%);">+            guint16      nSize  = (guint16)(guint32)pDescr->format_p.value;</span><br><span> </span><br><span>             pui8  = pui8DATA(data, pDescr->offset);</span><br><span> </span><br><span>@@ -1264,7 +1264,7 @@</span><br><span>          *  M_REC_TARRAY(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)</span><br><span>          * {t, offsetof(_STRUCT, _ElementCountField), (void*)CSNDESCR_##_MEMBER_TYPE, offsetof(_STRUCT, _MEMBER), #_MEMBER, (StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}</span><br><span>          */</span><br><span style="color: hsl(0, 100%, 40%);">-        gint16 nSizeElement = (gint16)(gint32)pDescr->serialize.value;</span><br><span style="color: hsl(120, 100%, 40%);">+        gint16 nSizeElement = (gint16)(gint32)pDescr->format_p.value;</span><br><span>         guint8  ElementCount = 0;</span><br><span>         pui8  = pui8DATA(data, pDescr->offset);</span><br><span> </span><br><span>@@ -1327,7 +1327,7 @@</span><br><span>          * M_REC_TARRAY(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)</span><br><span>          * {t, offsetof(_STRUCT, _ElementCountField), (void*)CSNDESCR_##_MEMBER_TYPE, offsetof(_STRUCT, _MEMBER), #_MEMBER, (StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}</span><br><span>          */</span><br><span style="color: hsl(0, 100%, 40%);">-        gint16      nSizeElement = (gint16)(gint32)pDescr->serialize.value;</span><br><span style="color: hsl(120, 100%, 40%);">+        gint16      nSizeElement = (gint16)(gint32)pDescr->format_p.value;</span><br><span>         guint8       ElementCount = 0;</span><br><span>         csnStream_t arT          = *ar;</span><br><span>         gboolean     EndOfList    = FALSE;</span><br><span>@@ -1608,7 +1608,7 @@</span><br><span>         guint8  no_of_bits  = (guint8) pDescr->i;</span><br><span>         guint16 nCount = (guint16)pDescr->descr.value; /* nCount supplied by value i.e. M_UINT_ARRAY(...) */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (pDescr->serialize.value != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+        if (pDescr->format_p.value != 0)</span><br><span>         { /* nCount specified by a reference to field holding value i.e. M_VAR_UINT_ARRAY(...) */</span><br><span>           nCount = *pui16DATA(data, nCount);</span><br><span>         }</span><br><span>@@ -1655,7 +1655,7 @@</span><br><span>         gint16      Status;</span><br><span>         csnStream_t arT    = *ar;</span><br><span>         gint16      nCount = pDescr->i;</span><br><span style="color: hsl(0, 100%, 40%);">-        guint16     nSize  = (guint16)(gint32)pDescr->serialize.value;</span><br><span style="color: hsl(120, 100%, 40%);">+        guint16     nSize  = (guint16)(gint32)pDescr->format_p.value;</span><br><span> </span><br><span>         pui8 = pui8DATA(data, pDescr->offset);</span><br><span>         if (pDescr->type == CSN_VARIABLE_TARRAY)</span><br><span>@@ -1801,7 +1801,7 @@</span><br><span> </span><br><span>    case CSN_SERIALIZE:</span><br><span>       {</span><br><span style="color: hsl(0, 100%, 40%);">-        StreamSerializeFcn_t serialize = pDescr->serialize.fcn;</span><br><span style="color: hsl(120, 100%, 40%);">+        StreamSerializeFcn_t serialize = (StreamSerializeFcn_t)pDescr->aux_fn;</span><br><span>         csnStream_t          arT       = *ar;</span><br><span>         guint8 length_len              = pDescr->i;</span><br><span>         gint16               Status = -1;</span><br><span>@@ -2025,7 +2025,7 @@</span><br><span>             guint8  no_of_bits  = (guint8) pDescr->i;</span><br><span>             guint16 nCount = (guint16)pDescr->descr.value; /* nCount supplied by value i.e. M_UINT_ARRAY(...) */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            if (pDescr->serialize.value != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            if (pDescr->format_p.value != 0)</span><br><span>             { /* nCount specified by a reference to field holding value i.e. M_VAR_UINT_ARRAY(...) */</span><br><span>               nCount = *pui16DATA(data, nCount);</span><br><span>             }</span><br><span>@@ -2072,7 +2072,7 @@</span><br><span>             gint16      Status;</span><br><span>             csnStream_t arT    = *ar;</span><br><span>             gint16      nCount = pDescr->i;</span><br><span style="color: hsl(0, 100%, 40%);">-            guint16     nSize  = (guint16)(gint32)pDescr->serialize.value;</span><br><span style="color: hsl(120, 100%, 40%);">+            guint16     nSize  = (guint16)(gint32)pDescr->format_p.value;</span><br><span> </span><br><span>             pui8 = pui8DATA(data, pDescr->offset);</span><br><span>             if (pDescr->type == CSN_VARIABLE_TARRAY)</span><br><span>@@ -2517,7 +2517,7 @@</span><br><span>          *  M_REC_TARRAY(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)</span><br><span>          * {t, offsetof(_STRUCT, _ElementCountField), (void*)CSNDESCR_##_MEMBER_TYPE, offsetof(_STRUCT, _MEMBER), #_MEMBER, (StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}</span><br><span>          */</span><br><span style="color: hsl(0, 100%, 40%);">-        gint16 nSizeElement = (gint16)(gint32)pDescr->serialize.value;</span><br><span style="color: hsl(120, 100%, 40%);">+        gint16 nSizeElement = (gint16)(gint32)pDescr->format_p.value;</span><br><span>         guint8  ElementCount = 0;</span><br><span>         pui8  = pui8DATA(data, pDescr->offset);</span><br><span>         /* Store the counted number of elements of the array */</span><br><span>@@ -2579,7 +2579,7 @@</span><br><span>          * M_REC_TARRAY(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)</span><br><span>          * {t, offsetof(_STRUCT, _ElementCountField), (void*)CSNDESCR_##_MEMBER_TYPE, offsetof(_STRUCT, _MEMBER), #_MEMBER, (StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}</span><br><span>          */</span><br><span style="color: hsl(0, 100%, 40%);">-        gint16      nSizeElement = (gint16)(gint32)pDescr->serialize.value;</span><br><span style="color: hsl(120, 100%, 40%);">+        gint16      nSizeElement = (gint16)(gint32)pDescr->format_p.value;</span><br><span>         guint8      ElementCount = 0;</span><br><span>         guint8      ElementNum   = 0;</span><br><span>         csnStream_t arT          = *ar;</span><br><span>diff --git a/src/csn1.h b/src/csn1.h</span><br><span>index e927076..c5ee919 100644</span><br><span>--- a/src/csn1.h</span><br><span>+++ b/src/csn1.h</span><br><span>@@ -77,6 +77,7 @@</span><br><span> #ifndef ElementsOf</span><br><span> #define ElementsOf(array) (sizeof(array) / sizeof(array[0]))</span><br><span> #endif</span><br><span style="color: hsl(120, 100%, 40%);">+typedef void(*void_fn_t)(void);</span><br><span> </span><br><span> /* Context holding CSN1 parameters */</span><br><span> typedef struct</span><br><span>@@ -194,7 +195,7 @@</span><br><span>   gint16      i;</span><br><span>   union</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-    void*     ptr;</span><br><span style="color: hsl(120, 100%, 40%);">+    const void*     ptr;</span><br><span>     guint32   value;</span><br><span>   } descr;</span><br><span>   unsigned      offset;</span><br><span>@@ -202,10 +203,11 @@</span><br><span>   const char* sz;</span><br><span>   union</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-    StreamSerializeFcn_t  fcn;</span><br><span style="color: hsl(120, 100%, 40%);">+    void *                dummy; /* to eliminate --pedantic compiler warnings */</span><br><span>     guint32               value;</span><br><span>     int*                  hf_ptr;</span><br><span style="color: hsl(0, 100%, 40%);">-  } serialize;</span><br><span style="color: hsl(120, 100%, 40%);">+  } format_p;</span><br><span style="color: hsl(120, 100%, 40%);">+  void_fn_t   aux_fn;</span><br><span> } CSN_DESCR;</span><br><span> </span><br><span> typedef struct</span><br><span>@@ -244,7 +246,7 @@</span><br><span>         CSN_DESCR CSNDESCR_##_STRUCT[] = {</span><br><span> </span><br><span> #define  CSN_DESCR_END(_STRUCT)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_END, 0, {0}, 0, FALSE, "", {(StreamSerializeFcn_t)0}} };</span><br><span style="color: hsl(120, 100%, 40%);">+         {CSN_END, 0, {0}, 0, FALSE, "", {NULL}, NULL} };</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * CSN_ERROR(Par1, Par2, Par3)</span><br><span>@@ -255,7 +257,7 @@</span><br><span>  *      Par3: Error code</span><br><span>  *****************************************************************************/</span><br><span> #define CSN_ERROR(_STRUCT, _Text, _ERRCODE)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_TRAP_ERROR, _ERRCODE, {(void*)_Text}, 0, FALSE, _Text, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_TRAP_ERROR, _ERRCODE, {_Text}, 0, FALSE, _Text, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_BIT(Par1, Par2)</span><br><span>@@ -264,7 +266,7 @@</span><br><span>  *      Par2: C structure element name</span><br><span>  *****************************************************************************/</span><br><span> #define M_BIT(_STRUCT, _MEMBER)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_BIT, 0, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_BIT, 0, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_BIT_OR_NULL(Par1, Par2)</span><br><span>@@ -274,11 +276,11 @@</span><br><span>  * Covers the case {null | 0 | 1}</span><br><span>  *****************************************************************************/</span><br><span>  #define M_BIT_OR_NULL(_STRUCT, _MEMBER)\</span><br><span style="color: hsl(0, 100%, 40%);">-         {CSN_BIT, 0, {0}, offsetof(_STRUCT, _MEMBER), TRUE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+         {CSN_BIT, 0, {0}, offsetof(_STRUCT, _MEMBER), TRUE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_NEXT_EXIST(Par1, Par2, Par3)</span><br><span style="color: hsl(0, 100%, 40%);">- * Indicates whether the next element or a group of elements defined in the </span><br><span style="color: hsl(120, 100%, 40%);">+ * Indicates whether the next element or a group of elements defined in the</span><br><span>  * structure is present or not.</span><br><span>  *      Par1: C structure name</span><br><span>  *      Par2: C structure element name</span><br><span>@@ -286,7 +288,7 @@</span><br><span>  *            element(s) does not exist</span><br><span>  *****************************************************************************/</span><br><span> #define M_NEXT_EXIST(_STRUCT, _MEMBER, _NoOfExisting)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_NEXT_EXIST, _NoOfExisting, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_NEXT_EXIST, _NoOfExisting, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_NEXT_EXIST_LH(Par1, Par2, Par3)</span><br><span>@@ -296,7 +298,7 @@</span><br><span>  * pattern 0x2B is performed on the read bit before the decision is made.</span><br><span>  *****************************************************************************/</span><br><span> #define M_NEXT_EXIST_LH(_STRUCT, _MEMBER, _NoOfExisting)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_NEXT_EXIST_LH, _NoOfExisting, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_NEXT_EXIST_LH, _NoOfExisting, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_NEXT_EXIST_OR_NULL(Par1, Par2, Par3)</span><br><span>@@ -306,7 +308,7 @@</span><br><span>  * Covers the case {null | 0 | 1 < IE >} </span><br><span>  *****************************************************************************/</span><br><span> #define M_NEXT_EXIST_OR_NULL(_STRUCT, _MEMBER, _NoOfExisting)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_NEXT_EXIST, _NoOfExisting, {(void*)1}, offsetof(_STRUCT, _MEMBER), TRUE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_NEXT_EXIST, _NoOfExisting, {0}, offsetof(_STRUCT, _MEMBER), TRUE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_NEXT_EXIST_OR_NULL_LH(Par1, Par2, Par3)</span><br><span>@@ -316,7 +318,7 @@</span><br><span>  * Covers the case {null | L | H < IE >} </span><br><span>  *****************************************************************************/</span><br><span> #define M_NEXT_EXIST_OR_NULL_LH(_STRUCT, _MEMBER, _NoOfExisting)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_NEXT_EXIST_LH, _NoOfExisting, {(void*)1}, offsetof(_STRUCT, _MEMBER), TRUE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_NEXT_EXIST_LH, _NoOfExisting, {(void*)1}, offsetof(_STRUCT, _MEMBER), TRUE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_UINT(Par1, Par2, Par3)</span><br><span>@@ -326,7 +328,7 @@</span><br><span>  *      Par3: number of bits used to code the element (between 1 and 32)</span><br><span>  *****************************************************************************/</span><br><span> #define M_UINT(_STRUCT, _MEMBER, _BITS)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_UINT, _BITS, {(void*)1}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_UINT, _BITS, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span>  /******************************************************************************</span><br><span>  * M_UINT_OR_NULL(Par1, Par2, Par3)</span><br><span>@@ -336,7 +338,7 @@</span><br><span>  * Covers the case {null | 0 | 1 < IE >}</span><br><span>  *****************************************************************************/</span><br><span>  #define M_UINT_OR_NULL(_STRUCT, _MEMBER, _BITS)\</span><br><span style="color: hsl(0, 100%, 40%);">-         {CSN_UINT, _BITS, {0}, offsetof(_STRUCT, _MEMBER), TRUE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+         {CSN_UINT, _BITS, {0}, offsetof(_STRUCT, _MEMBER), TRUE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_UINT(Par1, Par2, Par3)</span><br><span>@@ -346,7 +348,7 @@</span><br><span>  * received CSN.1 message</span><br><span>  *****************************************************************************/</span><br><span> #define M_UINT_LH(_STRUCT, _MEMBER, _BITS)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_UINT_LH, _BITS, {(void*)1}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_UINT_LH, _BITS, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_UINT_OFFSET(Par1, Par2, Par3, Par4)</span><br><span>@@ -357,7 +359,7 @@</span><br><span>  *      Par4: value added to the returned integer (offset)</span><br><span>  *****************************************************************************/</span><br><span> #define M_UINT_OFFSET(_STRUCT, _MEMBER, _BITS, _OFFSET)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_UINT_OFFSET, _BITS, {(void*)_OFFSET}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_UINT_OFFSET, _BITS, {(void*)_OFFSET}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_UINT_ARRAY(Par1, Par2, Par3, Par4)</span><br><span>@@ -368,7 +370,7 @@</span><br><span>  *      Par4: number of elements in the array (fixed integer value)</span><br><span>  *****************************************************************************/</span><br><span> #define M_UINT_ARRAY(_STRUCT, _MEMBER, _BITS, _ElementCount)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_UINT_ARRAY, _BITS, {(void*)_ElementCount}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_UINT_ARRAY, _BITS, {(void*)_ElementCount}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_VAR_UINT_ARRAY(Par1, Par2, Par3, Par4)</span><br><span>@@ -380,7 +382,7 @@</span><br><span>  *            structure member holding the length value</span><br><span>  *****************************************************************************/</span><br><span> #define M_VAR_UINT_ARRAY(_STRUCT, _MEMBER, _BITS, _ElementCountField)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_UINT_ARRAY, _BITS, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)1}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_UINT_ARRAY, _BITS, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(void *)1}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_VAR_ARRAY(Par1, Par2, Par3, Par4)</span><br><span>@@ -391,7 +393,7 @@</span><br><span>  *      Par4: offset that is added to the Par3 to get the actual size of the array</span><br><span>  *****************************************************************************/</span><br><span> #define M_VAR_ARRAY(_STRUCT, _MEMBER, _ElementCountField, _OFFSET)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_VARIABLE_ARRAY, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_VARIABLE_ARRAY, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_VAR_TARRAY(Par1, Par2, Par3, Par4)</span><br><span>@@ -402,14 +404,14 @@</span><br><span>  *      Par4: name of the structure member holding the size of the array</span><br><span>  *****************************************************************************/</span><br><span> #define M_VAR_TARRAY(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_VARIABLE_TARRAY, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_VARIABLE_TARRAY, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(void *)sizeof(_MEMBER_TYPE)}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_VAR_TARRAY_OFFSET(Par1, Par2, Par3, Par4)</span><br><span>  * Same as M_VAR_TARRAY with offset</span><br><span>  *****************************************************************************/</span><br><span> #define M_VAR_TARRAY_OFFSET(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_VARIABLE_TARRAY_OFFSET, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_VARIABLE_TARRAY_OFFSET, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(void *)sizeof(_MEMBER_TYPE)}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_REC_ARRAY(Par1, Par2, Par3, Par4)</span><br><span>@@ -427,7 +429,7 @@</span><br><span>  *      Par4: length of each element in bits</span><br><span>  *****************************************************************************/</span><br><span> #define M_REC_ARRAY(_STRUCT, _MEMBER, _ElementCountField, _BITS)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_RECURSIVE_ARRAY, _BITS, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_RECURSIVE_ARRAY, _BITS, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_VAR_TYPE_ARRAY(Par1, Par2, Par3, Par4)</span><br><span>@@ -438,7 +440,7 @@</span><br><span>  *      Par4: number of elements in the array (fixed integer value)</span><br><span>  *****************************************************************************/</span><br><span> #define M_TYPE_ARRAY(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCount)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_TYPE_ARRAY, _ElementCount, {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_TYPE_ARRAY, _ElementCount, {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(void *)sizeof(_MEMBER_TYPE)}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_REC_TARRAY(Par1, Par2, Par3, Par4)</span><br><span>@@ -450,7 +452,7 @@</span><br><span>  *      Par4: will hold the number of element in the array after unpacking</span><br><span>  *****************************************************************************/</span><br><span> #define M_REC_TARRAY(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_RECURSIVE_TARRAY, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_RECURSIVE_TARRAY, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(void *)sizeof(_MEMBER_TYPE)}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_REC_TARRAY1(Par1, Par2, Par3, Par4)</span><br><span>@@ -458,7 +460,7 @@</span><br><span>  * <list> ::= <type> {1 <type>} ** 0 ;</span><br><span>  *****************************************************************************/</span><br><span> #define M_REC_TARRAY_1(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_RECURSIVE_TARRAY_1, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_RECURSIVE_TARRAY_1, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(void *)sizeof(_MEMBER_TYPE)}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_REC_TARRAY2(Par1, Par2, Par3, Par4)</span><br><span>@@ -466,7 +468,7 @@</span><br><span>  * <lists> ::= <type> { 0 <type> } ** 1 ;</span><br><span>  *****************************************************************************/</span><br><span> #define M_REC_TARRAY_2(_STRUCT, _MEMBER, _MEMBER_TYPE, _ElementCountField)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_RECURSIVE_TARRAY_2, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)sizeof(_MEMBER_TYPE)}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_RECURSIVE_TARRAY_2, offsetof(_STRUCT, _ElementCountField), {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(void *)sizeof(_MEMBER_TYPE)}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_TYPE(Par1, Par2, Par3)</span><br><span>@@ -477,7 +479,7 @@</span><br><span>  *      Par3: type of member</span><br><span>  *****************************************************************************/</span><br><span> #define M_TYPE(_STRUCT, _MEMBER, _MEMBER_TYPE)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_TYPE, 0, {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_TYPE, 0, {(void*)CSNDESCR_##_MEMBER_TYPE}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_UNION(Par1, Par2)</span><br><span>@@ -490,14 +492,14 @@</span><br><span>  *      Par2: number of possible choice in the union</span><br><span>  *****************************************************************************/</span><br><span> #define M_UNION(_STRUCT, _COUNT)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_UNION, _COUNT, {0}, offsetof(_STRUCT, UnionType), FALSE, "UnionType", {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_UNION, _COUNT, {0}, offsetof(_STRUCT, UnionType), FALSE, "UnionType", {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_UNION_LH(Par1, Par2)</span><br><span>  * Same as M_UNION but masked with background value 0x2B</span><br><span>  *****************************************************************************/</span><br><span> #define M_UNION_LH(_STRUCT, _COUNT)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_UNION_LH, _COUNT, {0}, offsetof(_STRUCT, UnionType), FALSE, "UnionType", {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_UNION_LH, _COUNT, {0}, offsetof(_STRUCT, UnionType), FALSE, "UnionType", {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_CHOICE(Par1, Par2, Par3, Par4)</span><br><span>@@ -526,7 +528,7 @@</span><br><span>  *      Par4: number of possible choices in the union</span><br><span>  *****************************************************************************/</span><br><span> #define M_CHOICE(_STRUCT, _MEMBER, _CHOICE, _ElementCount)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_CHOICE, _ElementCount, {(void*)_CHOICE}, offsetof(_STRUCT, _MEMBER), FALSE, #_CHOICE, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_CHOICE, _ElementCount, {(void*)_CHOICE}, offsetof(_STRUCT, _MEMBER), FALSE, #_CHOICE, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_FIXED(Par1, Par2, Par3)</span><br><span>@@ -538,7 +540,7 @@</span><br><span> *             the message the unpacking procedure is aborted</span><br><span>  *****************************************************************************/</span><br><span> #define M_FIXED(_STRUCT, _BITS, _BITVALUE)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_FIXED, _BITS, {0}, _BITVALUE, FALSE, #_BITVALUE, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_FIXED, _BITS, {0}, _BITVALUE, FALSE, #_BITVALUE, {NULL}, NULL}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_SERIALIZE(Par1, Par2, Par3)</span><br><span>@@ -551,10 +553,10 @@</span><br><span>  * back control over the data stream and continues to work with the message.</span><br><span>  *****************************************************************************/</span><br><span> #define M_SERIALIZE(_STRUCT, _MEMBER, _LENGTH_LEN, _SERIALIZEFCN)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_SERIALIZE, _LENGTH_LEN, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {_SERIALIZEFCN}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_SERIALIZE, _LENGTH_LEN, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, (void_fn_t)_SERIALIZEFCN}</span><br><span> </span><br><span> #define M_CALLBACK(_STRUCT, _CSNCALLBACKFCN, _PARAM1, _PARAM2)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_CALLBACK, offsetof(_STRUCT, _PARAM1), {_CSNCALLBACKFCN}, offsetof(_STRUCT, _PARAM2),  FALSE, "CallBack_"#_CSNCALLBACKFCN, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_CALLBACK, offsetof(_STRUCT, _PARAM1), {0}, offsetof(_STRUCT, _PARAM2), FALSE, "CallBack_"#_CSNCALLBACKFCN, {NULL}, (void_fn_t)_CSNCALLBACKFCN}</span><br><span> </span><br><span> /******************************************************************************</span><br><span>  * M_BITMAP(Par1, Par2, Par3)</span><br><span>@@ -565,42 +567,42 @@</span><br><span>  *      Par3: length of the bitmap expressed in bits</span><br><span>  *****************************************************************************/</span><br><span> #define M_BITMAP(_STRUCT, _MEMBER, _BITS)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_BITMAP, _BITS, {0}, offsetof(_STRUCT, _MEMBER),  FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_BITMAP, _BITS, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /* variable length, right aligned bitmap i.e. _ElementCountField = 11 => 00000111 11111111 */</span><br><span> #define M_VAR_BITMAP(_STRUCT, _MEMBER, _ElementCountField, _OFFSET)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_VARIABLE_BITMAP, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_VARIABLE_BITMAP, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /* variable length, right aligned bitmap filling the rest of message</span><br><span>  * - when unpacking the _ElementCountField will be set in runtime</span><br><span>  * - when packing _ElementCountField contains the size of bitmap</span><br><span>  */</span><br><span> #define M_VAR_BITMAP_1(_STRUCT, _MEMBER, _ElementCountField, _OFFSET)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_VARIABLE_BITMAP_1, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_VARIABLE_BITMAP_1, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /* variable length, left aligned bitmap i.e. _ElementCountField = 11 => 11111111 11100000 */</span><br><span> #define M_LEFT_VAR_BMP(_STRUCT, _MEMBER, _ElementCountField, _OFFSET)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_LEFT_ALIGNED_VAR_BMP, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_LEFT_ALIGNED_VAR_BMP, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /* variable length, left aligned bitmap filling the rest of message</span><br><span>  *- when unpacking the _ElementCountField will be set in runtime</span><br><span>  * - when packing _ElementCountField contains the size of bitmap</span><br><span>  */</span><br><span> #define M_LEFT_VAR_BMP_1(_STRUCT, _MEMBER, _ElementCountField, _OFFSET)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_LEFT_ALIGNED_VAR_BMP_1, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_LEFT_ALIGNED_VAR_BMP_1, _OFFSET, {(void*)offsetof(_STRUCT, _ElementCountField)}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> /* todo: dissect padding bits looking for unexpected extensions */</span><br><span> #define M_PADDING_BITS(_STRUCT)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_PADDING_BITS, 0, {0}, 0, TRUE, "Padding", {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_PADDING_BITS, 0, {0}, 0, TRUE, "Padding", {NULL}, NULL}</span><br><span> </span><br><span> #define M_NULL(_STRUCT, _MEMBER, _SKIP_BITS)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_NULL, _SKIP_BITS, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_NULL, _SKIP_BITS, {0}, offsetof(_STRUCT, _MEMBER), FALSE, #_MEMBER, {NULL}, NULL}</span><br><span> </span><br><span> #define M_THIS_EXIST(_STRUCT)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_EXIST, 0, {0}, offsetof(_STRUCT, Exist), FALSE, "Exist", {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_EXIST, 0, {0}, offsetof(_STRUCT, Exist), FALSE, "Exist", {NULL}, NULL}</span><br><span> </span><br><span> #define M_THIS_EXIST_LH(_STRUCT)\</span><br><span style="color: hsl(0, 100%, 40%);">-        {CSN_EXIST_LH, 0, {0}, offsetof(_STRUCT, Exist), FALSE, "Exist", {(StreamSerializeFcn_t)0}}</span><br><span style="color: hsl(120, 100%, 40%);">+        {CSN_EXIST_LH, 0, {0}, offsetof(_STRUCT, Exist), FALSE, "Exist", {NULL}, NULL}</span><br><span> </span><br><span> /* return value 0 if ok else discontionue the unpacking */</span><br><span> typedef gint16 (*CsnCallBackFcn_t)(void* pv ,...);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16999">change 16999</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-pcu/+/16999"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia1a8c50c4b024ca6df4e3fbbf891cd33591ccc9b </div>
<div style="display:none"> Gerrit-Change-Number: 16999 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>