Преглед изворни кода

Clean up implementation specific behavior and some other code smells

Mark Giraud пре 5 година
родитељ
комит
d070a2ff51

+ 1 - 1
arch/ua_architecture_definitions.h

@@ -43,7 +43,7 @@
 # include <assert.h>
 # define UA_assert(ignore) assert(ignore)
 #else
-# define UA_assert(ignore)
+# define UA_assert(ignore) do {} while(0)
 #endif
 
 /* Outputs an error message at compile time if the assert fails.

+ 29 - 29
include/open62541/constants.h

@@ -59,13 +59,13 @@ typedef enum {
  * The access level to a node is given by the following constants that are ANDed
  * with the overall access level. */
 
-#define UA_ACCESSLEVELMASK_READ           (0x01<<0)
-#define UA_ACCESSLEVELMASK_WRITE          (0x01<<1)
-#define UA_ACCESSLEVELMASK_HISTORYREAD    (0x01<<2)
-#define UA_ACCESSLEVELMASK_HISTORYWRITE   (0x01<<3)
-#define UA_ACCESSLEVELMASK_SEMANTICCHANGE (0x01<<4)
-#define UA_ACCESSLEVELMASK_STATUSWRITE    (0x01<<5)
-#define UA_ACCESSLEVELMASK_TIMESTAMPWRITE (0x01<<6)
+#define UA_ACCESSLEVELMASK_READ           (0x01u << 0u)
+#define UA_ACCESSLEVELMASK_WRITE          (0x01u << 1u)
+#define UA_ACCESSLEVELMASK_HISTORYREAD    (0x01u << 2u)
+#define UA_ACCESSLEVELMASK_HISTORYWRITE   (0x01u << 3u)
+#define UA_ACCESSLEVELMASK_SEMANTICCHANGE (0x01u << 4u)
+#define UA_ACCESSLEVELMASK_STATUSWRITE    (0x01u << 5u)
+#define UA_ACCESSLEVELMASK_TIMESTAMPWRITE (0x01u << 6u)
 
 /**
  * Write Masks
@@ -73,28 +73,28 @@ typedef enum {
  * The write mask and user write mask is given by the following constants that
  * are ANDed for the overall write mask. Part 3: 5.2.7 Table 2 */
 
-#define UA_WRITEMASK_ACCESSLEVEL             (0x01<<0)
-#define UA_WRITEMASK_ARRRAYDIMENSIONS        (0x01<<1)
-#define UA_WRITEMASK_BROWSENAME              (0x01<<2)
-#define UA_WRITEMASK_CONTAINSNOLOOPS         (0x01<<3)
-#define UA_WRITEMASK_DATATYPE                (0x01<<4)
-#define UA_WRITEMASK_DESCRIPTION             (0x01<<5)
-#define UA_WRITEMASK_DISPLAYNAME             (0x01<<6)
-#define UA_WRITEMASK_EVENTNOTIFIER           (0x01<<7)
-#define UA_WRITEMASK_EXECUTABLE              (0x01<<8)
-#define UA_WRITEMASK_HISTORIZING             (0x01<<9)
-#define UA_WRITEMASK_INVERSENAME             (0x01<<10)
-#define UA_WRITEMASK_ISABSTRACT              (0x01<<11)
-#define UA_WRITEMASK_MINIMUMSAMPLINGINTERVAL (0x01<<12)
-#define UA_WRITEMASK_NODECLASS               (0x01<<13)
-#define UA_WRITEMASK_NODEID                  (0x01<<14)
-#define UA_WRITEMASK_SYMMETRIC               (0x01<<15)
-#define UA_WRITEMASK_USERACCESSLEVEL         (0x01<<16)
-#define UA_WRITEMASK_USEREXECUTABLE          (0x01<<17)
-#define UA_WRITEMASK_USERWRITEMASK           (0x01<<18)
-#define UA_WRITEMASK_VALUERANK               (0x01<<19)
-#define UA_WRITEMASK_WRITEMASK               (0x01<<20)
-#define UA_WRITEMASK_VALUEFORVARIABLETYPE    (0x01<<21)
+#define UA_WRITEMASK_ACCESSLEVEL             (0x01u << 0u)
+#define UA_WRITEMASK_ARRRAYDIMENSIONS        (0x01u << 1u)
+#define UA_WRITEMASK_BROWSENAME              (0x01u << 2u)
+#define UA_WRITEMASK_CONTAINSNOLOOPS         (0x01u << 3u)
+#define UA_WRITEMASK_DATATYPE                (0x01u << 4u)
+#define UA_WRITEMASK_DESCRIPTION             (0x01u << 5u)
+#define UA_WRITEMASK_DISPLAYNAME             (0x01u << 6u)
+#define UA_WRITEMASK_EVENTNOTIFIER           (0x01u << 7u)
+#define UA_WRITEMASK_EXECUTABLE              (0x01u << 8u)
+#define UA_WRITEMASK_HISTORIZING             (0x01u << 9u)
+#define UA_WRITEMASK_INVERSENAME             (0x01u << 10u)
+#define UA_WRITEMASK_ISABSTRACT              (0x01u << 11u)
+#define UA_WRITEMASK_MINIMUMSAMPLINGINTERVAL (0x01u << 12u)
+#define UA_WRITEMASK_NODECLASS               (0x01u << 13u)
+#define UA_WRITEMASK_NODEID                  (0x01u << 14u)
+#define UA_WRITEMASK_SYMMETRIC               (0x01u << 15u)
+#define UA_WRITEMASK_USERACCESSLEVEL         (0x01u << 16u)
+#define UA_WRITEMASK_USEREXECUTABLE          (0x01u << 17u)
+#define UA_WRITEMASK_USERWRITEMASK           (0x01u << 18u)
+#define UA_WRITEMASK_VALUERANK               (0x01u << 19u)
+#define UA_WRITEMASK_WRITEMASK               (0x01u << 20u)
+#define UA_WRITEMASK_VALUEFORVARIABLETYPE    (0x01u << 21u)
 
 /**
  * ValueRanks

+ 2 - 2
plugins/ua_nodestore_default.c

@@ -15,8 +15,8 @@
 #define BEGIN_CRITSECT(NODEMAP) pthread_mutex_lock(&(NODEMAP)->mutex)
 #define END_CRITSECT(NODEMAP) pthread_mutex_unlock(&(NODEMAP)->mutex)
 #else
-#define BEGIN_CRITSECT(NODEMAP)
-#define END_CRITSECT(NODEMAP)
+#define BEGIN_CRITSECT(NODEMAP) do {} while(0)
+#define END_CRITSECT(NODEMAP) do {} while(0)
 #endif
 
 /* container_of */

+ 18 - 15
plugins/ua_pki_default.c

@@ -87,13 +87,13 @@ certificateVerification_verify(void *verificationContext,
         /*              UA_LOGCATEGORY_SECURITYPOLICY, */
         /*              "Verifying the certificate failed with error: %s", buff); */
 
-        if(flags & MBEDTLS_X509_BADCERT_NOT_TRUSTED) {
+        if(flags & (uint32_t)MBEDTLS_X509_BADCERT_NOT_TRUSTED) {
             retval = UA_STATUSCODE_BADCERTIFICATEUNTRUSTED;
-        } else if (flags & MBEDTLS_X509_BADCERT_FUTURE ||
-           flags & MBEDTLS_X509_BADCERT_EXPIRED) {
+        } else if(flags & (uint32_t)MBEDTLS_X509_BADCERT_FUTURE ||
+                  flags & (uint32_t)MBEDTLS_X509_BADCERT_EXPIRED) {
             retval = UA_STATUSCODE_BADCERTIFICATETIMEINVALID;
-        } else if(flags & MBEDTLS_X509_BADCERT_REVOKED ||
-           flags & MBEDTLS_X509_BADCRL_EXPIRED) {
+        } else if(flags & (uint32_t)MBEDTLS_X509_BADCERT_REVOKED ||
+                  flags & (uint32_t)MBEDTLS_X509_BADCRL_EXPIRED) {
             retval = UA_STATUSCODE_BADCERTIFICATEREVOKED;
         } else {
             retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
@@ -209,21 +209,24 @@ UA_CertificateVerification_Trustlist(UA_CertificateVerification *cv,
 
     int err = 0;
     for(size_t i = 0; i < certificateTrustListSize; i++) {
-        err |= mbedtls_x509_crt_parse(&ci->certificateTrustList,
-                                      certificateTrustList[i].data,
-                                      certificateTrustList[i].length);
+        err = mbedtls_x509_crt_parse(&ci->certificateTrustList,
+                                     certificateTrustList[i].data,
+                                     certificateTrustList[i].length);
+        if(err)
+            goto error;
     }
     for(size_t i = 0; i < certificateRevocationListSize; i++) {
-        err |= mbedtls_x509_crl_parse(&ci->certificateRevocationList,
-                                      certificateRevocationList[i].data,
-                                      certificateRevocationList[i].length);
+        err = mbedtls_x509_crl_parse(&ci->certificateRevocationList,
+                                     certificateRevocationList[i].data,
+                                     certificateRevocationList[i].length);
+        if(err)
+            goto error;
     }
 
-    if(err) {
-        certificateVerification_deleteMembers(cv);
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
     return UA_STATUSCODE_GOOD;
+error:
+    certificateVerification_deleteMembers(cv);
+    return UA_STATUSCODE_BADINTERNALERROR;
 }
 
 #endif

+ 2 - 2
src/client/ua_client_connect.c

@@ -37,8 +37,8 @@ setClientState(UA_Client *client, UA_ClientState state) {
 /* Open the Connection */
 /***********************/
 
-#define UA_BITMASK_MESSAGETYPE 0x00ffffff
-#define UA_BITMASK_CHUNKTYPE 0xff000000
+#define UA_BITMASK_MESSAGETYPE 0x00ffffffu
+#define UA_BITMASK_CHUNKTYPE 0xff000000u
 
 static UA_StatusCode
 processACKResponse(void *application, UA_Connection *connection, UA_ByteString *chunk) {

+ 67 - 48
src/pubsub/ua_pubsub.c

@@ -785,17 +785,21 @@ UA_PubSubDataSetWriter_generateKeyFrameMessage(UA_Server *server, UA_DataSetMess
         UA_PubSubDataSetField_sampleValue(server, dsf, dfv);
 
         /* Deactivate statuscode? */
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_STATUSCODE) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_STATUSCODE) == 0)
             dfv->hasStatus = false;
 
         /* Deactivate timestamps */
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask &
+            (u64)UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP) == 0)
             dfv->hasSourceTimestamp = false;
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask &
+            (u64)UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS) == 0)
             dfv->hasSourcePicoseconds = false;
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_SERVERTIMESTAMP) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask &
+            (u64)UA_DATASETFIELDCONTENTMASK_SERVERTIMESTAMP) == 0)
             dfv->hasServerTimestamp = false;
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask &
+            (u64)UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS) == 0)
             dfv->hasServerPicoseconds = false;
 
 #ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
@@ -868,17 +872,19 @@ UA_PubSubDataSetWriter_generateDeltaFrameMessage(UA_Server *server,
         dataSetWriter->lastSamples[i].valueChanged = false;
 
         /* Deactivate statuscode? */
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_STATUSCODE) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_STATUSCODE) == 0)
             dff->fieldValue.hasStatus = false;
 
         /* Deactivate timestamps? */
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP) == 0)
             dff->fieldValue.hasSourceTimestamp = false;
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS) ==
+           0)
             dff->fieldValue.hasServerPicoseconds = false;
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_SERVERTIMESTAMP) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_SERVERTIMESTAMP) == 0)
             dff->fieldValue.hasServerTimestamp = false;
-        if((dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS) == 0)
+        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS) ==
+           0)
             dff->fieldValue.hasServerPicoseconds = false;
 
         currentDeltaField++;
@@ -914,27 +920,29 @@ UA_DataSetWriter_generateDataSetMessage(UA_Server *server, UA_DataSetMessage *da
     UA_UadpDataSetWriterMessageDataType *dataSetWriterMessageDataType = NULL;
     if((dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED ||
         dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED_NODELETE) &&
-       (dataSetWriter->config.messageSettings.content.decoded.type == &UA_TYPES[UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE])) {
+       (dataSetWriter->config.messageSettings.content.decoded.type ==
+        &UA_TYPES[UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE])) {
         dataSetWriterMessageDataType = (UA_UadpDataSetWriterMessageDataType *)
             dataSetWriter->config.messageSettings.content.decoded.data;
 
         /* type is UADP */
         messageType = UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE;
     } else if((dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED ||
-        dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED_NODELETE) &&
-       (dataSetWriter->config.messageSettings.content.decoded.type == &UA_TYPES[UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE])) {
+               dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED_NODELETE) &&
+              (dataSetWriter->config.messageSettings.content.decoded.type ==
+               &UA_TYPES[UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE])) {
         jsonDataSetWriterMessageDataType = (UA_JsonDataSetWriterMessageDataType *)
             dataSetWriter->config.messageSettings.content.decoded.data;
 
-            /* type is JSON */
-            messageType = UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE;
-    }else {
+        /* type is JSON */
+        messageType = UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE;
+    } else {
         /* create default flag configuration if no
          * UadpDataSetWriterMessageDataType was passed in */
         memset(&defaultUadpConfiguration, 0, sizeof(UA_UadpDataSetWriterMessageDataType));
         defaultUadpConfiguration.dataSetMessageContentMask = (UA_UadpDataSetMessageContentMask)
-            (UA_UADPDATASETMESSAGECONTENTMASK_TIMESTAMP | UA_UADPDATASETMESSAGECONTENTMASK_MAJORVERSION |
-             UA_UADPDATASETMESSAGECONTENTMASK_MINORVERSION);
+            ((u64)UA_UADPDATASETMESSAGECONTENTMASK_TIMESTAMP | (u64)UA_UADPDATASETMESSAGECONTENTMASK_MAJORVERSION |
+             (u64)UA_UADPDATASETMESSAGECONTENTMASK_MINORVERSION);
         dataSetWriterMessageDataType = &defaultUadpConfiguration;
     }
 
@@ -942,7 +950,7 @@ UA_DataSetWriter_generateDataSetMessage(UA_Server *server, UA_DataSetMessage *da
     if(dataSetWriterMessageDataType &&
        (dataSetWriterMessageDataType->networkMessageNumber != 0 ||
         dataSetWriterMessageDataType->dataSetOffset != 0 ||
-        dataSetWriterMessageDataType->configuredSize !=0 )) {
+        dataSetWriterMessageDataType->configuredSize != 0)) {
         UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
                        "Static DSM configuration not supported. Using defaults");
         dataSetWriterMessageDataType->networkMessageNumber = 0;
@@ -952,73 +960,84 @@ UA_DataSetWriter_generateDataSetMessage(UA_Server *server, UA_DataSetMessage *da
 
     /* The field encoding depends on the flags inside the writer config.
      * TODO: This can be moved to the encoding layer. */
-    if(dataSetWriter->config.dataSetFieldContentMask & UA_DATASETFIELDCONTENTMASK_RAWDATAENCODING) {
+    if((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_RAWDATAENCODING) {
         dataSetMessage->header.fieldEncoding = UA_FIELDENCODING_RAWDATA;
-    } else if (dataSetWriter->config.dataSetFieldContentMask &
-               (UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP | UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS |
-                UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS | UA_DATASETFIELDCONTENTMASK_STATUSCODE)) {
+    } else if((u64)dataSetWriter->config.dataSetFieldContentMask &
+              ((u64)UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP | (u64)UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS |
+               (u64)UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS | (u64)UA_DATASETFIELDCONTENTMASK_STATUSCODE)) {
         dataSetMessage->header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
     } else {
         dataSetMessage->header.fieldEncoding = UA_FIELDENCODING_VARIANT;
     }
 
-    if(messageType == UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE){
+    if(messageType == UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE) {
         /* Std: 'The DataSetMessageContentMask defines the flags for the content of the DataSetMessage header.' */
-        if(dataSetWriterMessageDataType->dataSetMessageContentMask & UA_UADPDATASETMESSAGECONTENTMASK_MAJORVERSION){
+        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_UADPDATASETMESSAGECONTENTMASK_MAJORVERSION) {
             dataSetMessage->header.configVersionMajorVersionEnabled = true;
             dataSetMessage->header.configVersionMajorVersion =
                 currentDataSet->dataSetMetaData.configurationVersion.majorVersion;
         }
-        if(dataSetWriterMessageDataType->dataSetMessageContentMask & UA_UADPDATASETMESSAGECONTENTMASK_MINORVERSION){
+        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_UADPDATASETMESSAGECONTENTMASK_MINORVERSION) {
             dataSetMessage->header.configVersionMinorVersionEnabled = true;
             dataSetMessage->header.configVersionMinorVersion =
                 currentDataSet->dataSetMetaData.configurationVersion.minorVersion;
         }
 
-        if(dataSetWriterMessageDataType->dataSetMessageContentMask & UA_UADPDATASETMESSAGECONTENTMASK_SEQUENCENUMBER) {
+        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_UADPDATASETMESSAGECONTENTMASK_SEQUENCENUMBER) {
             dataSetMessage->header.dataSetMessageSequenceNrEnabled = true;
             dataSetMessage->header.dataSetMessageSequenceNr =
                 dataSetWriter->actualDataSetMessageSequenceCount;
         }
 
-        if(dataSetWriterMessageDataType->dataSetMessageContentMask & UA_UADPDATASETMESSAGECONTENTMASK_TIMESTAMP) {
+        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_UADPDATASETMESSAGECONTENTMASK_TIMESTAMP) {
             dataSetMessage->header.timestampEnabled = true;
             dataSetMessage->header.timestamp = UA_DateTime_now();
         }
         /* TODO: Picoseconds resolution not supported atm */
-        if(dataSetWriterMessageDataType->dataSetMessageContentMask & UA_UADPDATASETMESSAGECONTENTMASK_PICOSECONDS) {
+        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_UADPDATASETMESSAGECONTENTMASK_PICOSECONDS) {
             dataSetMessage->header.picoSecondsIncluded = false;
         }
 
         /* TODO: Statuscode not supported yet */
-        if(dataSetWriterMessageDataType->dataSetMessageContentMask & UA_UADPDATASETMESSAGECONTENTMASK_STATUS){
+        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_UADPDATASETMESSAGECONTENTMASK_STATUS) {
             dataSetMessage->header.statusEnabled = false;
         }
-    }else if(messageType == UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE){
-        if(jsonDataSetWriterMessageDataType->dataSetMessageContentMask & UA_JSONDATASETMESSAGECONTENTMASK_METADATAVERSION){
+    } else if(messageType == UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE) {
+        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_JSONDATASETMESSAGECONTENTMASK_METADATAVERSION) {
             dataSetMessage->header.configVersionMajorVersionEnabled = true;
             dataSetMessage->header.configVersionMajorVersion =
                 currentDataSet->dataSetMetaData.configurationVersion.majorVersion;
         }
-        if(jsonDataSetWriterMessageDataType->dataSetMessageContentMask & UA_JSONDATASETMESSAGECONTENTMASK_METADATAVERSION){
+        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_JSONDATASETMESSAGECONTENTMASK_METADATAVERSION) {
             dataSetMessage->header.configVersionMinorVersionEnabled = true;
             dataSetMessage->header.configVersionMinorVersion =
                 currentDataSet->dataSetMetaData.configurationVersion.minorVersion;
         }
 
-        if(jsonDataSetWriterMessageDataType->dataSetMessageContentMask & UA_JSONDATASETMESSAGECONTENTMASK_SEQUENCENUMBER) {
+        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_JSONDATASETMESSAGECONTENTMASK_SEQUENCENUMBER) {
             dataSetMessage->header.dataSetMessageSequenceNrEnabled = true;
             dataSetMessage->header.dataSetMessageSequenceNr =
                 dataSetWriter->actualDataSetMessageSequenceCount;
         }
 
-        if(jsonDataSetWriterMessageDataType->dataSetMessageContentMask & UA_JSONDATASETMESSAGECONTENTMASK_TIMESTAMP) {
+        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_JSONDATASETMESSAGECONTENTMASK_TIMESTAMP) {
             dataSetMessage->header.timestampEnabled = true;
             dataSetMessage->header.timestamp = UA_DateTime_now();
         }
 
         /* TODO: Statuscode not supported yet */
-        if(jsonDataSetWriterMessageDataType->dataSetMessageContentMask & UA_JSONDATASETMESSAGECONTENTMASK_STATUS){
+        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
+           (u64)UA_JSONDATASETMESSAGECONTENTMASK_STATUS) {
             dataSetMessage->header.statusEnabled = false;
         }
     }
@@ -1134,27 +1153,27 @@ sendNetworkMessage(UA_PubSubConnection *connection, UA_WriterGroup *wg,
     memset(&nm, 0, sizeof(UA_NetworkMessage));
 
     nm.publisherIdEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_PUBLISHERID);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_PUBLISHERID) != 0;
     nm.groupHeaderEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_GROUPHEADER);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPHEADER) != 0;
     nm.groupHeader.writerGroupIdEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_WRITERGROUPID);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_WRITERGROUPID) != 0;
     nm.groupHeader.groupVersionEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_GROUPVERSION);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPVERSION) != 0;
     nm.groupHeader.networkMessageNumberEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_NETWORKMESSAGENUMBER);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_NETWORKMESSAGENUMBER) != 0;
     nm.groupHeader.sequenceNumberEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_SEQUENCENUMBER);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_SEQUENCENUMBER) != 0;
     nm.payloadHeaderEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER) != 0;
     nm.timestampEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_TIMESTAMP);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_TIMESTAMP) != 0;
     nm.picosecondsEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_PICOSECONDS);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_PICOSECONDS) != 0;
     nm.dataSetClassIdEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_DATASETCLASSID);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_DATASETCLASSID) != 0;
     nm.promotedFieldsEnabled =
-        !!(wgm->networkMessageContentMask & UA_UADPNETWORKMESSAGECONTENTMASK_PROMOTEDFIELDS);
+        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_PROMOTEDFIELDS) != 0;
 
     nm.version = 1;
     nm.networkMessageType = UA_NETWORKMESSAGE_DATASET;
@@ -1187,7 +1206,7 @@ sendNetworkMessage(UA_PubSubConnection *connection, UA_WriterGroup *wg,
     UA_STACKARRAY(UA_Byte, stackBuf, stackSize);
     buf.data = stackBuf;
     buf.length = msgSize;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
+    UA_StatusCode retval;
     if(msgSize > UA_MAX_STACKBUF) {
         retval = UA_ByteString_allocBuffer(&buf, msgSize);
         if(retval != UA_STATUSCODE_GOOD)

+ 1 - 1
src/pubsub/ua_pubsub_manager.c

@@ -222,7 +222,7 @@ UA_Server_removePublishedDataSet(UA_Server *server, const UA_NodeId pds) {
         if(UA_NodeId_equal(&server->pubSubManager.publishedDataSets[publishedDataSetIndex].identifier, &pds)){
             publishedDataSet = &server->pubSubManager.publishedDataSets[publishedDataSetIndex];
             break;
-        };
+        }
     }
     if(!publishedDataSet){
         return UA_STATUSCODE_BADNOTFOUND;

+ 2 - 8
src/pubsub/ua_pubsub_networkmessage.c

@@ -858,8 +858,6 @@ UA_DataSetMessageHeader_DataSetFlags2Enabled(const UA_DataSetMessageHeader* src)
 UA_StatusCode
 UA_DataSetMessageHeader_encodeBinary(const UA_DataSetMessageHeader* src, UA_Byte **bufPos,
                                      const UA_Byte *bufEnd) {
-    UA_StatusCode retval = UA_STATUSCODE_BADNOTIMPLEMENTED;
-
     UA_Byte v;
     // DataSetFlags1 
     v = (UA_Byte)src->fieldEncoding;
@@ -945,15 +943,12 @@ UA_DataSetMessageHeader_encodeBinary(const UA_DataSetMessageHeader* src, UA_Byte
             return rv;
     }
 
-    retval = UA_STATUSCODE_GOOD;
-    return retval;
+    return UA_STATUSCODE_GOOD;
 }
 
 UA_StatusCode
 UA_DataSetMessageHeader_decodeBinary(const UA_ByteString *src, size_t *offset,
                                      UA_DataSetMessageHeader* dst) {
-    UA_StatusCode retval = UA_STATUSCODE_BADNOTIMPLEMENTED;
-
     memset(dst, 0, sizeof(UA_DataSetMessageHeader));
     UA_Byte v = 0;
     UA_StatusCode rv = UA_Byte_decodeBinary(src, offset, &v);
@@ -1045,8 +1040,7 @@ UA_DataSetMessageHeader_decodeBinary(const UA_ByteString *src, size_t *offset,
         dst->configVersionMinorVersion = 0;
     }
 
-    retval = UA_STATUSCODE_GOOD;
-    return retval;
+    return UA_STATUSCODE_GOOD;
 }
 
 size_t

+ 4 - 4
src/pubsub/ua_pubsub_ns0.c

@@ -303,7 +303,7 @@ addPubSubConnectionAction(UA_Server *server,
             if(UA_NetworkAddressUrlDataType_copy((UA_NetworkAddressUrlDataType *) eo.content.decoded.data,
                                                  &networkAddressUrlDataType) != UA_STATUSCODE_GOOD){
                 return UA_STATUSCODE_BADOUTOFMEMORY;
-            };
+            }
         }
     }
     UA_PubSubConnectionConfig connectionConfig;
@@ -332,13 +332,13 @@ addPubSubConnectionAction(UA_Server *server,
 
     if(retVal != UA_STATUSCODE_GOOD){
         return retVal;
-    };
+    }
     for(size_t i = 0; i < pubSubConnectionDataType.writerGroupsSize; i++){
         //UA_PubSubConnection_addWriterGroup(server, UA_NODEID_NULL, NULL, NULL);
-    };
+    }
     for(size_t i = 0; i < pubSubConnectionDataType.readerGroupsSize; i++){
         //UA_PubSubConnection_addReaderGroup(server, NULL, NULL, NULL);
-    };
+    }
     UA_NetworkAddressUrlDataType_deleteMembers(&networkAddressUrlDataType);
     //set ouput value
     UA_Variant_setScalarCopy(output, &connectionId, &UA_TYPES[UA_TYPES_NODEID]);

+ 2 - 3
src/server/ua_server_binary.c

@@ -664,7 +664,6 @@ createSecureChannel(void *application, UA_Connection *connection,
     /* Iterate over available endpoints and choose the correct one */
     UA_EndpointDescription *endpoint = NULL;
     UA_SecurityPolicy *securityPolicy = NULL;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
     for(size_t i = 0; i < server->config.endpointsSize; ++i) {
         UA_EndpointDescription *endpointCandidate = &server->config.endpoints[i];
         if(!UA_ByteString_equal(&asymHeader->securityPolicyUri,
@@ -675,7 +674,7 @@ createSecureChannel(void *application, UA_Connection *connection,
         if(!securityPolicy)
             return UA_STATUSCODE_BADINTERNALERROR;
 
-        retval = securityPolicy->asymmetricModule.
+        UA_StatusCode retval = securityPolicy->asymmetricModule.
             compareCertificateThumbprint(securityPolicy,
                                          &asymHeader->receiverCertificateThumbprint);
         if(retval != UA_STATUSCODE_GOOD)
@@ -711,7 +710,7 @@ processCompleteChunkWithoutChannel(UA_Server *server, UA_Connection *connection,
         return retval;
 
     // Only HEL and OPN messages possible without a channel (on the server side)
-    switch(tcpMessageHeader.messageTypeAndChunkType & 0x00ffffff) {
+    switch(tcpMessageHeader.messageTypeAndChunkType & 0x00ffffffu) {
     case UA_MESSAGETYPE_HEL:
         retval = processHEL(server, connection, message, &offset);
         break;

+ 9 - 11
src/ua_securechannel.c

@@ -22,8 +22,8 @@
 #include "ua_types_encoding_binary.h"
 #include "ua_util_internal.h"
 
-#define UA_BITMASK_MESSAGETYPE 0x00ffffff
-#define UA_BITMASK_CHUNKTYPE 0xff000000
+#define UA_BITMASK_MESSAGETYPE 0x00ffffffu
+#define UA_BITMASK_CHUNKTYPE 0xff000000u
 #define UA_ASYMMETRIC_ALG_SECURITY_HEADER_FIXED_LENGTH 12
 #define UA_SYMMETRIC_ALG_SECURITY_HEADER_LENGTH 4
 #define UA_SEQUENCE_HEADER_LENGTH 8
@@ -455,7 +455,7 @@ padChunkAsym(UA_SecureChannel *channel, const UA_ByteString *const buf,
         (plainTextBlockSize - ((bytesToWrite + signatureSize + paddingBytes) % plainTextBlockSize));
 
     /* Write the padding. This is <= because the paddingSize byte also has to be written */
-    UA_Byte paddingSize = (UA_Byte)(totalPaddingSize & 0xff);
+    UA_Byte paddingSize = (UA_Byte)(totalPaddingSize & 0xffu);
     for(UA_UInt16 i = 0; i <= totalPaddingSize; ++i) {
         **buf_pos = paddingSize;
         ++*buf_pos;
@@ -464,7 +464,7 @@ padChunkAsym(UA_SecureChannel *channel, const UA_ByteString *const buf,
     /* Write the extra padding byte if required */
     if(securityPolicy->asymmetricModule.cryptoModule.encryptionAlgorithm.
        getRemoteKeyLength(securityPolicy, channel->channelContext) > 2048) {
-        UA_Byte extraPaddingSize = (UA_Byte)(totalPaddingSize >> 8);
+        UA_Byte extraPaddingSize = (UA_Byte)(totalPaddingSize >> 8u);
         **buf_pos = extraPaddingSize;
         ++*buf_pos;
     }
@@ -598,7 +598,7 @@ calculatePaddingSym(const UA_SecurityPolicy *securityPolicy, const void *channel
     size_t padding = (encryptionBlockSize -
                       ((bytesToWrite + signatureSize + 1) % encryptionBlockSize));
     *paddingSize = (UA_Byte)padding;
-    *extraPaddingSize = (UA_Byte)(padding >> 8);
+    *extraPaddingSize = (UA_Byte)(padding >> 8u);
     return (UA_UInt16)padding;
 }
 
@@ -697,7 +697,7 @@ setBufPos(UA_MessageContext *mc) {
         /* PaddingSize and ExtraPaddingSize fields */
         size_t encryptionBlockSize = securityPolicy->symmetricModule.cryptoModule.
             encryptionAlgorithm.getLocalBlockSize(securityPolicy, channel->channelContext);
-        mc->buf_end -= 1 + ((encryptionBlockSize >> 8) ? 1 : 0);
+        mc->buf_end -= 1 + ((encryptionBlockSize >> 8u) ? 1 : 0);
 
         /* Reduce the message body size with the remainder of the operation
          * maxEncryptedDataSize modulo EncryptionBlockSize to get a whole
@@ -770,7 +770,6 @@ encodeHeadersSym(UA_MessageContext *const messageContext, size_t totalLength) {
 
 static UA_StatusCode
 sendSymmetricChunk(UA_MessageContext *messageContext) {
-    UA_StatusCode res = UA_STATUSCODE_GOOD;
     UA_SecureChannel *const channel = messageContext->channel;
     const UA_SecurityPolicy *securityPolicy = channel->securityPolicy;
     UA_Connection *const connection = channel->connection;
@@ -778,7 +777,7 @@ sendSymmetricChunk(UA_MessageContext *messageContext) {
         return UA_STATUSCODE_BADINTERNALERROR;
 
     size_t bodyLength = 0;
-    res = checkLimitsSym(messageContext, &bodyLength);
+    UA_StatusCode res = checkLimitsSym(messageContext, &bodyLength);
     if(res != UA_STATUSCODE_GOOD)
         goto error;
 
@@ -1124,7 +1123,7 @@ decodeChunkPaddingSize(const UA_SecureChannel *const channel,
     size_t keyLength = cryptoModule->encryptionAlgorithm.
         getRemoteKeyLength(channel->securityPolicy, channel->channelContext);
     if(keyLength > 2048) {
-        paddingSize <<= 8;
+        paddingSize <<= 8u;
         paddingSize += 1;
         paddingSize += chunk->data[chunkSizeAfterDecryption - sigsize - 2];
     }
@@ -1250,7 +1249,6 @@ processSequenceNumberSym(UA_SecureChannel *channel, UA_UInt32 sequenceNumber) {
 static UA_StatusCode
 checkAsymHeader(UA_SecureChannel *const channel,
                 UA_AsymmetricAlgorithmSecurityHeader *const asymHeader) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
     const UA_SecurityPolicy *const securityPolicy = channel->securityPolicy;
 
     if(!UA_ByteString_equal(&securityPolicy->policyUri,
@@ -1264,7 +1262,7 @@ checkAsymHeader(UA_SecureChannel *const channel,
     if(retval != UA_STATUSCODE_GOOD)
     return retval;
     */
-    retval = securityPolicy->asymmetricModule.
+    UA_StatusCode retval = securityPolicy->asymmetricModule.
         compareCertificateThumbprint(securityPolicy,
                                      &asymHeader->receiverCertificateThumbprint);
     if(retval != UA_STATUSCODE_GOOD) {

+ 53 - 52
src/ua_types_encoding_binary.c

@@ -565,12 +565,12 @@ DECODE_BINARY(Guid) {
 }
 
 /* NodeId */
-#define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0
-#define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1
-#define UA_NODEIDTYPE_NUMERIC_COMPLETE 2
+#define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0u
+#define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1u
+#define UA_NODEIDTYPE_NUMERIC_COMPLETE 2u
 
-#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40
-#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80
+#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40u
+#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80u
 
 /* For ExpandedNodeId, we prefill the encoding mask. */
 static status
@@ -597,22 +597,19 @@ NodeId_encodeBinaryWithEncodingMask(UA_NodeId const *src, u8 encoding, Ctx *ctx)
             ret |= ENCODE_DIRECT(&identifier8, Byte);
         }
         break;
-    case UA_NODEIDTYPE_STRING:
-        encoding |= UA_NODEIDTYPE_STRING;
+    case UA_NODEIDTYPE_STRING:encoding |= (u8)UA_NODEIDTYPE_STRING;
         ret |= ENCODE_DIRECT(&encoding, Byte);
         ret |= ENCODE_DIRECT(&src->namespaceIndex, UInt16);
         if(ret != UA_STATUSCODE_GOOD)
             return ret;
         ret = ENCODE_DIRECT(&src->identifier.string, String);
         break;
-    case UA_NODEIDTYPE_GUID:
-        encoding |= UA_NODEIDTYPE_GUID;
+    case UA_NODEIDTYPE_GUID:encoding |= (u8)UA_NODEIDTYPE_GUID;
         ret |= ENCODE_DIRECT(&encoding, Byte);
         ret |= ENCODE_DIRECT(&src->namespaceIndex, UInt16);
         ret |= ENCODE_DIRECT(&src->identifier.guid, Guid);
         break;
-    case UA_NODEIDTYPE_BYTESTRING:
-        encoding |= UA_NODEIDTYPE_BYTESTRING;
+    case UA_NODEIDTYPE_BYTESTRING:encoding |= (u8)UA_NODEIDTYPE_BYTESTRING;
         ret |= ENCODE_DIRECT(&encoding, Byte);
         ret |= ENCODE_DIRECT(&src->namespaceIndex, UInt16);
         if(ret != UA_STATUSCODE_GOOD)
@@ -744,8 +741,8 @@ DECODE_BINARY(QualifiedName) {
 }
 
 /* LocalizedText */
-#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE 0x01
-#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT 0x02
+#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE 0x01u
+#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT 0x02u
 
 ENCODE_BINARY(LocalizedText) {
     /* Set up the encoding mask */
@@ -982,9 +979,9 @@ Variant_encodeBinaryWrapExtensionObject(const UA_Variant *src,
 }
 
 enum UA_VARIANT_ENCODINGMASKTYPE {
-    UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK = 0x3F,        /* bits 0:5 */
-    UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS  = (0x01 << 6), /* bit 6 */
-    UA_VARIANT_ENCODINGMASKTYPE_ARRAY       = (0x01 << 7)  /* bit 7 */
+    UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK = 0x3Fu,        /* bits 0:5 */
+    UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS = (u8)(0x01u << 6u), /* bit 6 */
+    UA_VARIANT_ENCODINGMASKTYPE_ARRAY = (u8)(0x01u << 7u)  /* bit 7 */
 };
 
 ENCODE_BINARY(Variant) {
@@ -997,19 +994,19 @@ ENCODE_BINARY(Variant) {
     const UA_Boolean isBuiltin = (src->type->typeKind <= UA_DATATYPEKIND_DIAGNOSTICINFO);
     const UA_Boolean isEnum = (src->type->typeKind == UA_DATATYPEKIND_ENUM);
     if(isBuiltin)
-        encoding |= UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(src->type->typeKind + 1);
+        encoding = (u8)(encoding | (u8)((u8)UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(src->type->typeKind + 1u)));
     else if(isEnum)
-        encoding |= UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(UA_TYPES_INT32 + 1);
+        encoding = (u8)(encoding | (u8)((u8)UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(UA_TYPES_INT32 + 1u)));
     else
-        encoding |= UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(UA_TYPES_EXTENSIONOBJECT + 1);
+        encoding = (u8)(encoding | (u8)((u8)UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(UA_TYPES_EXTENSIONOBJECT + 1u)));
 
     /* Set the array type in the encoding mask */
     const UA_Boolean isArray = src->arrayLength > 0 || src->data <= UA_EMPTY_ARRAY_SENTINEL;
     const UA_Boolean hasDimensions = isArray && src->arrayDimensionsSize > 0;
     if(isArray) {
-        encoding |= UA_VARIANT_ENCODINGMASKTYPE_ARRAY;
+        encoding |= (u8)UA_VARIANT_ENCODINGMASKTYPE_ARRAY;
         if(hasDimensions)
-            encoding |= UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS;
+            encoding |= (u8)UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS;
     }
 
     /* Encode the encoding byte */
@@ -1087,13 +1084,13 @@ DECODE_BINARY(Variant) {
         return UA_STATUSCODE_GOOD;
 
     /* Does the variant contain an array? */
-    const UA_Boolean isArray = (encodingByte & UA_VARIANT_ENCODINGMASKTYPE_ARRAY) > 0;
+    const UA_Boolean isArray = (encodingByte & (u8)UA_VARIANT_ENCODINGMASKTYPE_ARRAY) > 0;
 
     /* Get the datatype of the content. The type must be a builtin data type.
      * All not-builtin types are wrapped in an ExtensionObject. The "type kind"
      * for types up to DiagnsticInfo equals to the index in the encoding
      * byte. */
-    size_t typeKind = (size_t)((encodingByte & UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK) - 1);
+    size_t typeKind = (size_t)((encodingByte & (u8)UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK) - 1);
     if(typeKind > UA_DATATYPEKIND_DIAGNOSTICINFO)
         return UA_STATUSCODE_BADDECODINGERROR;
 
@@ -1121,7 +1118,7 @@ DECODE_BINARY(Variant) {
     }
 
     /* Decode array dimensions */
-    if(isArray && (encodingByte & UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS) > 0)
+    if(isArray && (encodingByte & (u8)UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS) > 0)
         ret |= Array_decodeBinary((void**)&dst->arrayDimensions, &dst->arrayDimensionsSize,
                                   &UA_TYPES[UA_TYPES_INT32], ctx);
 
@@ -1132,13 +1129,12 @@ DECODE_BINARY(Variant) {
 /* DataValue */
 ENCODE_BINARY(DataValue) {
     /* Set up the encoding mask */
-    u8 encodingMask = (u8)
-        (((u8)src->hasValue) |
-         ((u8)src->hasStatus << 1) |
-         ((u8)src->hasSourceTimestamp << 2) |
-         ((u8)src->hasServerTimestamp << 3) |
-         ((u8)src->hasSourcePicoseconds << 4) |
-         ((u8)src->hasServerPicoseconds << 5));
+    u8 encodingMask = src->hasValue;
+    encodingMask |= (u8)(src->hasStatus << 1u);
+    encodingMask |= (u8)(src->hasSourceTimestamp << 2u);
+    encodingMask |= (u8)(src->hasServerTimestamp << 3u);
+    encodingMask |= (u8)(src->hasSourcePicoseconds << 4u);
+    encodingMask |= (u8)(src->hasServerPicoseconds << 5u);
 
     /* Encode the encoding byte */
     status ret = ENCODE_DIRECT(&encodingMask, Byte);
@@ -1180,29 +1176,29 @@ DECODE_BINARY(DataValue) {
     ctx->depth++;
 
     /* Decode the content */
-    if(encodingMask & 0x01) {
+    if(encodingMask & 0x01u) {
         dst->hasValue = true;
         ret |= DECODE_DIRECT(&dst->value, Variant);
     }
-    if(encodingMask & 0x02) {
+    if(encodingMask & 0x02u) {
         dst->hasStatus = true;
         ret |= DECODE_DIRECT(&dst->status, UInt32); /* StatusCode */
     }
-    if(encodingMask & 0x04) {
+    if(encodingMask & 0x04u) {
         dst->hasSourceTimestamp = true;
         ret |= DECODE_DIRECT(&dst->sourceTimestamp, UInt64); /* DateTime */
     }
-    if(encodingMask & 0x10) {
+    if(encodingMask & 0x10u) {
         dst->hasSourcePicoseconds = true;
         ret |= DECODE_DIRECT(&dst->sourcePicoseconds, UInt16);
         if(dst->sourcePicoseconds > MAX_PICO_SECONDS)
             dst->sourcePicoseconds = MAX_PICO_SECONDS;
     }
-    if(encodingMask & 0x08) {
+    if(encodingMask & 0x08u) {
         dst->hasServerTimestamp = true;
         ret |= DECODE_DIRECT(&dst->serverTimestamp, UInt64); /* DateTime */
     }
-    if(encodingMask & 0x20) {
+    if(encodingMask & 0x20u) {
         dst->hasServerPicoseconds = true;
         ret |= DECODE_DIRECT(&dst->serverPicoseconds, UInt16);
         if(dst->serverPicoseconds > MAX_PICO_SECONDS)
@@ -1217,10 +1213,12 @@ DECODE_BINARY(DataValue) {
 /* DiagnosticInfo */
 ENCODE_BINARY(DiagnosticInfo) {
     /* Set up the encoding mask */
-    u8 encodingMask = (u8)
-        ((u8)src->hasSymbolicId | ((u8)src->hasNamespaceUri << 1) |
-        ((u8)src->hasLocalizedText << 2) | ((u8)src->hasLocale << 3) |
-        ((u8)src->hasAdditionalInfo << 4) | ((u8)src->hasInnerDiagnosticInfo << 5));
+    u8 encodingMask = src->hasSymbolicId;
+    encodingMask |= (u8)(src->hasNamespaceUri << 1u);
+    encodingMask |= (u8)(src->hasLocalizedText << 2u);
+    encodingMask |= (u8)(src->hasLocale << 3u);
+    encodingMask |= (u8)(src->hasAdditionalInfo << 4u);
+    encodingMask |= (u8)(src->hasInnerDiagnosticInfo << 5u);
 
     /* Encode the numeric content */
     status ret = ENCODE_DIRECT(&encodingMask, Byte);
@@ -1265,31 +1263,31 @@ DECODE_BINARY(DiagnosticInfo) {
         return ret;
 
     /* Decode the content */
-    if(encodingMask & 0x01) {
+    if(encodingMask & 0x01u) {
         dst->hasSymbolicId = true;
         ret |= DECODE_DIRECT(&dst->symbolicId, UInt32); /* Int32 */
     }
-    if(encodingMask & 0x02) {
+    if(encodingMask & 0x02u) {
         dst->hasNamespaceUri = true;
         ret |= DECODE_DIRECT(&dst->namespaceUri, UInt32); /* Int32 */
     }
-    if(encodingMask & 0x04) {
+    if(encodingMask & 0x04u) {
         dst->hasLocalizedText = true;
         ret |= DECODE_DIRECT(&dst->localizedText, UInt32); /* Int32 */
     }
-    if(encodingMask & 0x08) {
+    if(encodingMask & 0x08u) {
         dst->hasLocale = true;
         ret |= DECODE_DIRECT(&dst->locale, UInt32); /* Int32 */
     }
-    if(encodingMask & 0x10) {
+    if(encodingMask & 0x10u) {
         dst->hasAdditionalInfo = true;
         ret |= DECODE_DIRECT(&dst->additionalInfo, String);
     }
-    if(encodingMask & 0x20) {
+    if(encodingMask & 0x20u) {
         dst->hasInnerStatusCode = true;
         ret |= DECODE_DIRECT(&dst->innerStatusCode, UInt32); /* StatusCode */
     }
-    if(encodingMask & 0x40) {
+    if(encodingMask & 0x40u) {
         /* innerDiagnosticInfo is allocated on the heap */
         dst->innerDiagnosticInfo = (UA_DiagnosticInfo*)
             UA_calloc(1, sizeof(UA_DiagnosticInfo));
@@ -1346,6 +1344,7 @@ encodeBinaryStruct(const void *src, const UA_DataType *type, Ctx *ctx) {
 
 static status
 encodeBinaryNotImplemented(const void *src, const UA_DataType *type, Ctx *ctx) {
+    (void)src, (void)type, (void)ctx;
     return UA_STATUSCODE_BADNOTIMPLEMENTED;
 }
 
@@ -1414,6 +1413,7 @@ UA_encodeBinary(const void *src, const UA_DataType *type,
 
 static status
 decodeBinaryNotImplemented(void *dst, const UA_DataType *type, Ctx *ctx) {
+    (void)dst, (void)type, (void)ctx;
     return UA_STATUSCODE_BADNOTIMPLEMENTED;
 }
 
@@ -1533,10 +1533,10 @@ Array_calcSizeBinary(const void *src, size_t length, const UA_DataType *type) {
     return s;
 }
 
-static size_t calcSizeBinary1(const void *_, const UA_DataType *__) { return 1; }
-static size_t calcSizeBinary2(const void *_, const UA_DataType *__) { return 2; }
-static size_t calcSizeBinary4(const void *_, const UA_DataType *__) { return 4; }
-static size_t calcSizeBinary8(const void *_, const UA_DataType *__) { return 8; }
+static size_t calcSizeBinary1(const void *_, const UA_DataType *__) { (void)_, (void)__; return 1; }
+static size_t calcSizeBinary2(const void *_, const UA_DataType *__) { (void)_, (void)__; return 2; }
+static size_t calcSizeBinary4(const void *_, const UA_DataType *__) { (void)_, (void)__; return 4; }
+static size_t calcSizeBinary8(const void *_, const UA_DataType *__) { (void)_, (void)__; return 8; }
 
 CALCSIZE_BINARY(String) { return 4 + src->length; }
 
@@ -1717,6 +1717,7 @@ calcSizeBinaryStructure(const void *p, const UA_DataType *type) {
 
 static size_t
 calcSizeBinaryNotImplemented(const void *p, const UA_DataType *type) {
+    (void)p, (void)type;
     return 0;
 }
 

+ 126 - 89
src/ua_types_encoding_json.c

@@ -165,16 +165,6 @@ status writeJsonNull(CtxJson *ctx) {
     return UA_STATUSCODE_GOOD;
 }
 
-#define UA_STRING_TO_CSTRING(in,out)            \
-    UA_STACKARRAY(char, out, in->length + 1);   \
-    memcpy(out, in->data, in->length);          \
-    out[in->length] = 0;
-
-#define NULL_TERMINATE(in, inlength, out)       \
-    UA_STACKARRAY(char, out, inlength + 1);     \
-    memcpy(out, in, inlength);                  \
-    out[inlength] = 0;
-
 /* Keys for JSON */
 
 /* LocalizedText */
@@ -537,8 +527,11 @@ ENCODE_JSON(String) {
     if(!src->data)
         return writeJsonNull(ctx);
 
-    if(src->length == 0)
-        return writeJsonQuote(ctx) | writeJsonQuote(ctx);
+    if(src->length == 0) {
+        status retval = writeJsonQuote(ctx);
+        retval |= writeJsonQuote(ctx);
+        return  retval;
+    }
 
     UA_StatusCode ret = writeJsonQuote(ctx);
     
@@ -548,14 +541,14 @@ ENCODE_JSON(String) {
     const char *pos = str;
     const char *end = str;
     const char *lim = str + src->length;
-    UA_Int32 codepoint = 0;
+    UA_UInt32 codepoint = 0;
     while(1) {
         const char *text;
         u8 seq[13];
         size_t length;
 
         while(end < lim) {
-            end = utf8_iterate(pos, (size_t)(lim - pos), &codepoint);
+            end = utf8_iterate(pos, (size_t)(lim - pos), (int32_t *)&codepoint);
             if(!end)
                 return UA_STATUSCODE_BADENCODINGERROR;
 
@@ -563,6 +556,7 @@ ENCODE_JSON(String) {
             if(codepoint == '\\' || codepoint == '"' || codepoint < 0x20)
                 break;
 
+            /* TODO: Why is this commented? */
             /* slash 
             if((flags & JSON_ESCAPE_SLASH) && codepoint == '/')
                 break;*/
@@ -601,38 +595,38 @@ ENCODE_JSON(String) {
                 /* codepoint is in BMP */
                 seq[0] = '\\';
                 seq[1] = 'u';
-                UA_Byte b1 = (UA_Byte)(codepoint >> 8);
-                UA_Byte b2 = (UA_Byte)(codepoint >> 0);
-                seq[2] = hexmapLower[(b1 & 0xF0) >> 4];
-                seq[3] = hexmapLower[b1 & 0x0F];
-                seq[4] = hexmapLower[(b2 & 0xF0) >> 4];
-                seq[5] = hexmapLower[b2 & 0x0F];
+                UA_Byte b1 = (UA_Byte)(codepoint >> 8u);
+                UA_Byte b2 = (UA_Byte)(codepoint >> 0u);
+                seq[2] = hexmapLower[(b1 & 0xF0u) >> 4u];
+                seq[3] = hexmapLower[b1 & 0x0Fu];
+                seq[4] = hexmapLower[(b2 & 0xF0u) >> 4u];
+                seq[5] = hexmapLower[b2 & 0x0Fu];
                 length = 6;
             } else {
                 /* not in BMP -> construct a UTF-16 surrogate pair */
                 codepoint -= 0x10000;
-                UA_Int32 first = 0xD800 | ((codepoint & 0xffc00) >> 10);
-                UA_Int32 last = 0xDC00 | (codepoint & 0x003ff);
+                UA_UInt32 first = 0xD800u | ((codepoint & 0xffc00u) >> 10u);
+                UA_UInt32 last = 0xDC00u | (codepoint & 0x003ffu);
 
-                UA_Byte fb1 = (UA_Byte)(first >> 8);
-                UA_Byte fb2 = (UA_Byte)(first >> 0);
+                UA_Byte fb1 = (UA_Byte)(first >> 8u);
+                UA_Byte fb2 = (UA_Byte)(first >> 0u);
                     
-                UA_Byte lb1 = (UA_Byte)(last >> 8);
-                UA_Byte lb2 = (UA_Byte)(last >> 0);
+                UA_Byte lb1 = (UA_Byte)(last >> 8u);
+                UA_Byte lb2 = (UA_Byte)(last >> 0u);
                     
                 seq[0] = '\\';
                 seq[1] = 'u';
-                seq[2] = hexmapLower[(fb1 & 0xF0) >> 4];
-                seq[3] = hexmapLower[fb1 & 0x0F];
-                seq[4] = hexmapLower[(fb2 & 0xF0) >> 4];
-                seq[5] = hexmapLower[fb2 & 0x0F];
+                seq[2] = hexmapLower[(fb1 & 0xF0u) >> 4u];
+                seq[3] = hexmapLower[fb1 & 0x0Fu];
+                seq[4] = hexmapLower[(fb2 & 0xF0u) >> 4u];
+                seq[5] = hexmapLower[fb2 & 0x0Fu];
                     
                 seq[6] = '\\';
                 seq[7] = 'u';
-                seq[8] = hexmapLower[(lb1 & 0xF0) >> 4];
-                seq[9] = hexmapLower[lb1 & 0x0F];
-                seq[10] = hexmapLower[(lb2 & 0xF0) >> 4];
-                seq[11] = hexmapLower[lb2 & 0x0F];
+                seq[8] = hexmapLower[(lb1 & 0xF0u) >> 4u];
+                seq[9] = hexmapLower[lb1 & 0x0Fu];
+                seq[10] = hexmapLower[(lb2 & 0xF0u) >> 4u];
+                seq[11] = hexmapLower[lb2 & 0x0Fu];
                 length = 12;
             }
             text = (char*)seq;
@@ -655,8 +649,11 @@ ENCODE_JSON(ByteString) {
     if(!src->data)
         return writeJsonNull(ctx);
 
-    if(src->length == 0)
-        return writeJsonQuote(ctx) | writeJsonQuote(ctx);
+    if(src->length == 0) {
+        status retval = writeJsonQuote(ctx);
+        retval |= writeJsonQuote(ctx);
+        return retval;
+    }
 
     status ret = writeJsonQuote(ctx);
     int flen;
@@ -708,22 +705,22 @@ static void UA_Guid_to_hex(const UA_Guid *guid, u8* out) {
 #endif
     size_t i = 0, j = 28;
     for(; i<8;i++,j-=4)         /* pos 0-7, 4byte, (a) */
-        out[i] = hexmap[(guid->data1 >> j) & 0x0F];
+        out[i] = hexmap[(guid->data1 >> j) & 0x0Fu];
     out[i++] = '-';             /* pos 8 */
     for(j=12; i<13;i++,j-=4)    /* pos 9-12, 2byte, (b) */
-        out[i] = hexmap[(guid->data2 >> j) & 0x0F];
+        out[i] = hexmap[(uint16_t)(guid->data2 >> j) & 0x0Fu];
     out[i++] = '-';             /* pos 13 */
     for(j=12; i<18;i++,j-=4)    /* pos 14-17, 2byte (c) */
-        out[i] = hexmap[(guid->data3 >> j) & 0x0F];
+        out[i] = hexmap[(uint16_t)(guid->data3 >> j) & 0x0Fu];
     out[i++] = '-';             /* pos 18 */
     for(j=0;i<23;i+=2,j++) {     /* pos 19-22, 2byte (d) */
-        out[i] = hexmap[(guid->data4[j] & 0xF0) >> 4];
-        out[i+1] = hexmap[guid->data4[j] & 0x0F];
+        out[i] = hexmap[(guid->data4[j] & 0xF0u) >> 4u];
+        out[i+1] = hexmap[guid->data4[j] & 0x0Fu];
     }
     out[i++] = '-';             /* pos 23 */
     for(j=2; i<36;i+=2,j++) {    /* pos 24-35, 6byte (e) */
-        out[i] = hexmap[(guid->data4[j] & 0xF0) >> 4];
-        out[i+1] = hexmap[guid->data4[j] & 0x0F];
+        out[i] = hexmap[(guid->data4[j] & 0xF0u) >> 4u];
+        out[i+1] = hexmap[guid->data4[j] & 0x0Fu];
     }
 }
 
@@ -841,8 +838,8 @@ ENCODE_JSON(NodeId) {
             }
         }
     }
-    
-    ret = writeJsonObjEnd(ctx);
+
+    ret |= writeJsonObjEnd(ctx);
     return ret;
 }
 
@@ -1410,13 +1407,13 @@ encodeJsonStructure(const void *src, const UA_DataType *type, CtxJson *ctx) {
         if(!m->isArray) {
             ptr += m->padding;
             size_t memSize = mt->memSize;
-            ret = encodeJsonJumpTable[mt->typeKind]((const void*) ptr, mt, ctx);
+            ret |= encodeJsonJumpTable[mt->typeKind]((const void*) ptr, mt, ctx);
             ptr += memSize;
         } else {
             ptr += m->padding;
             const size_t length = *((const size_t*) ptr);
             ptr += sizeof (size_t);
-            ret = encodeJsonArray(ctx, *(void * const *)ptr, length, mt);
+            ret |= encodeJsonArray(ctx, *(void * const *)ptr, length, mt);
             ptr += sizeof (void*);
         }
     }
@@ -1429,6 +1426,7 @@ encodeJsonStructure(const void *src, const UA_DataType *type, CtxJson *ctx) {
 
 static status
 encodeJsonNotImplemented(const void *src, const UA_DataType *type, CtxJson *ctx) {
+    (void) src, (void) type, (void)ctx;
     return UA_STATUSCODE_BADNOTIMPLEMENTED;
 }
 
@@ -1537,34 +1535,35 @@ UA_calcSizeJson(const void *src, const UA_DataType *type,
 
 /* Macro which gets current size and char pointer of current Token. Needs
  * ParseCtx (parseCtx) and CtxJson (ctx). Does NOT increment index of Token. */
-#define GET_TOKEN                                                       \
-    size_t tokenSize = (size_t)(parseCtx->tokenArray[parseCtx->index].end - parseCtx->tokenArray[parseCtx->index].start); \
-    char* tokenData = (char*)(ctx->pos + parseCtx->tokenArray[parseCtx->index].start);
+#define GET_TOKEN(data, size) do {                                               \
+    (size) = (size_t)(parseCtx->tokenArray[parseCtx->index].end - parseCtx->tokenArray[parseCtx->index].start); \
+    (data) = (char*)(ctx->pos + parseCtx->tokenArray[parseCtx->index].start); } while(0)
 
-#define ALLOW_NULL                  \
+#define ALLOW_NULL do {             \
     if(isJsonNull(ctx, parseCtx)) { \
         parseCtx->index++;          \
         return UA_STATUSCODE_GOOD;  \
-    }
+    }} while(0)
 
-#define CHECK_TOKEN_BOUNDS                        \
+#define CHECK_TOKEN_BOUNDS do {                   \
     if(parseCtx->index >= parseCtx->tokenCount)   \
-        return UA_STATUSCODE_BADDECODINGERROR;
+        return UA_STATUSCODE_BADDECODINGERROR;    \
+    } while(0)
 
-#define CHECK_PRIMITIVE                           \
+#define CHECK_PRIMITIVE do {                      \
     if(getJsmnType(parseCtx) != JSMN_PRIMITIVE) { \
         return UA_STATUSCODE_BADDECODINGERROR;    \
-    }
+    }} while(0)
 
-#define CHECK_STRING                           \
+#define CHECK_STRING do {                      \
     if(getJsmnType(parseCtx) != JSMN_STRING) { \
         return UA_STATUSCODE_BADDECODINGERROR; \
-    }
+    }} while(0)
 
-#define CHECK_OBJECT                           \
+#define CHECK_OBJECT do {                      \
     if(getJsmnType(parseCtx) != JSMN_OBJECT) { \
         return UA_STATUSCODE_BADDECODINGERROR; \
-    }
+    }} while(0)
 
 /* Forward declarations*/
 #define DECODE_JSON(TYPE) static status                        \
@@ -1636,7 +1635,9 @@ static UA_SByte jsoneq(const char *json, jsmntok_t *tok, const char *searchKey)
 DECODE_JSON(Boolean) {
     CHECK_PRIMITIVE;
     CHECK_TOKEN_BOUNDS;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     if(tokenSize == 4 &&
        tokenData[0] == 't' && tokenData[1] == 'r' &&
@@ -1729,7 +1730,9 @@ parseSignedInteger(char* inputBuffer, size_t sizeOfBuffer,
         return UA_STATUSCODE_BADDECODINGERROR;
 
     /* convert to null terminated string  */
-    NULL_TERMINATE(inputBuffer, sizeOfBuffer, string);
+    UA_STACKARRAY(char, string, sizeOfBuffer + 1);
+    memcpy(string, inputBuffer, sizeOfBuffer);
+    string[sizeOfBuffer] = 0;
 
     /* Conversion */
     char *endptr, *str;
@@ -1756,7 +1759,9 @@ parseSignedInteger(char* inputBuffer, size_t sizeOfBuffer,
 DECODE_JSON(Byte) {
     CHECK_TOKEN_BOUNDS;
     CHECK_PRIMITIVE;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     UA_UInt64 out = 0;
     UA_StatusCode s = parseUnsignedInteger(tokenData, tokenSize, &out);
@@ -1770,7 +1775,9 @@ DECODE_JSON(Byte) {
 DECODE_JSON(UInt16) {
     CHECK_TOKEN_BOUNDS;
     CHECK_PRIMITIVE;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     UA_UInt64 out = 0;
     UA_StatusCode s = parseUnsignedInteger(tokenData, tokenSize, &out);
@@ -1784,7 +1791,9 @@ DECODE_JSON(UInt16) {
 DECODE_JSON(UInt32) {
     CHECK_TOKEN_BOUNDS;
     CHECK_PRIMITIVE;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     UA_UInt64 out = 0;
     UA_StatusCode s = parseUnsignedInteger(tokenData, tokenSize, &out);
@@ -1798,7 +1807,9 @@ DECODE_JSON(UInt32) {
 DECODE_JSON(UInt64) {
     CHECK_TOKEN_BOUNDS;
     CHECK_STRING;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     UA_UInt64 out = 0;
     UA_StatusCode s = parseUnsignedInteger(tokenData, tokenSize, &out);
@@ -1812,7 +1823,9 @@ DECODE_JSON(UInt64) {
 DECODE_JSON(SByte) {
     CHECK_TOKEN_BOUNDS;
     CHECK_PRIMITIVE;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     UA_Int64 out = 0;
     UA_StatusCode s = parseSignedInteger(tokenData, tokenSize, &out);
@@ -1826,7 +1839,9 @@ DECODE_JSON(SByte) {
 DECODE_JSON(Int16) {
     CHECK_TOKEN_BOUNDS;
     CHECK_PRIMITIVE;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     UA_Int64 out = 0;
     UA_StatusCode s = parseSignedInteger(tokenData, tokenSize, &out);
@@ -1840,7 +1855,9 @@ DECODE_JSON(Int16) {
 DECODE_JSON(Int32) {
     CHECK_TOKEN_BOUNDS;
     CHECK_PRIMITIVE;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     UA_Int64 out = 0;
     UA_StatusCode s = parseSignedInteger(tokenData, tokenSize, &out);
@@ -1854,7 +1871,9 @@ DECODE_JSON(Int32) {
 DECODE_JSON(Int64) {
     CHECK_TOKEN_BOUNDS;
     CHECK_STRING;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     UA_Int64 out = 0;
     UA_StatusCode s = parseSignedInteger(tokenData, tokenSize, &out);
@@ -1880,7 +1899,9 @@ static UA_UInt32 hex2int(char ch) {
 */
 DECODE_JSON(Float) {
     CHECK_TOKEN_BOUNDS;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
     
     /* https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/
      * Maximum digit counts for select IEEE floating-point formats: 149
@@ -1946,7 +1967,9 @@ DECODE_JSON(Float) {
 /* Either a JSMN_STRING or JSMN_PRIMITIVE */
 DECODE_JSON(Double) {
     CHECK_TOKEN_BOUNDS;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
     
     /* https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/
      * Maximum digit counts for select IEEE floating-point formats: 1074
@@ -2024,13 +2047,13 @@ static UA_Guid UA_Guid_fromChars(const char* chars) {
         dst.data2 |= (UA_UInt16)(hex2int(chars[9+i]) << (12 - (i*4)));
         dst.data3 |= (UA_UInt16)(hex2int(chars[14+i]) << (12 - (i*4)));
     }
-    dst.data4[0] |= (UA_Byte)(hex2int(chars[19]) << 4);
-    dst.data4[0] |= (UA_Byte)(hex2int(chars[20]) << 0);
-    dst.data4[1] |= (UA_Byte)(hex2int(chars[21]) << 4);
-    dst.data4[1] |= (UA_Byte)(hex2int(chars[22]) << 0);
+    dst.data4[0] |= (UA_Byte)(hex2int(chars[19]) << 4u);
+    dst.data4[0] |= (UA_Byte)(hex2int(chars[20]) << 0u);
+    dst.data4[1] |= (UA_Byte)(hex2int(chars[21]) << 4u);
+    dst.data4[1] |= (UA_Byte)(hex2int(chars[22]) << 0u);
     for(size_t i = 0; i < 6; i++) {
-        dst.data4[2+i] |= (UA_Byte)(hex2int(chars[24 + i*2]) << 4);
-        dst.data4[2+i] |= (UA_Byte)(hex2int(chars[25 + i*2]) << 0);
+        dst.data4[2+i] |= (UA_Byte)(hex2int(chars[24 + i*2]) << 4u);
+        dst.data4[2+i] |= (UA_Byte)(hex2int(chars[25 + i*2]) << 0u);
     }
     return dst;
 }
@@ -2038,7 +2061,9 @@ static UA_Guid UA_Guid_fromChars(const char* chars) {
 DECODE_JSON(Guid) {
     CHECK_STRING;
     CHECK_TOKEN_BOUNDS;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     if(tokenSize != 36)
         return UA_STATUSCODE_BADDECODINGERROR;
@@ -2064,7 +2089,9 @@ DECODE_JSON(String) {
     ALLOW_NULL;
     CHECK_STRING;
     CHECK_TOKEN_BOUNDS;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     /* Empty string? */
     if(tokenSize == 0) {
@@ -2117,9 +2144,10 @@ DECODE_JSON(String) {
         /* Unicode */
         if(p + 4 >= end)
             goto cleanup;
-        int32_t value = decode_unicode_escape(p);
-        if(value < 0)
+        int32_t value_signed = decode_unicode_escape(p);
+        if(value_signed < 0)
             goto cleanup;
+        uint32_t value = (uint32_t)value_signed;
         p += 5;
 
         if(0xD800 <= value && value <= 0xDBFF) {
@@ -2128,10 +2156,10 @@ DECODE_JSON(String) {
                 goto cleanup;
             if(*p != '\\' || *(p + 1) != 'u')
                 goto cleanup;
-            int32_t value2 = decode_unicode_escape(p+1);
+            int32_t value2 = decode_unicode_escape(p + 1);
             if(value2 < 0xDC00 || value2 > 0xDFFF)
                 goto cleanup;
-            value = ((value - 0xD800) << 10) + (value2 - 0xDC00) + 0x10000;
+            value = ((value - 0xD800u) << 10u) + (uint32_t)((value2 - 0xDC00) + 0x10000);
             p += 6;
         } else if(0xDC00 <= value && value <= 0xDFFF) {
             /* Invalid Unicode '\\u%04X' */
@@ -2139,7 +2167,7 @@ DECODE_JSON(String) {
         }
 
         size_t length;
-        if(utf8_encode(value, pos, &length))
+        if(utf8_encode((int32_t)value, pos, &length))
             goto cleanup;
 
         pos += length;
@@ -2166,7 +2194,9 @@ DECODE_JSON(ByteString) {
     ALLOW_NULL;
     CHECK_STRING;
     CHECK_TOKEN_BOUNDS;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
 
     /* Empty bytestring? */
     if(tokenSize == 0) {
@@ -2516,7 +2546,9 @@ DECODE_JSON(ExpandedNodeId) {
 DECODE_JSON(DateTime) {
     CHECK_STRING;
     CHECK_TOKEN_BOUNDS;
-    GET_TOKEN;
+    size_t tokenSize;
+    char* tokenData;
+    GET_TOKEN(tokenData, tokenSize);
     
     /* TODO: proper ISO 8601:2004 parsing, musl strptime!*/
     /* DateTime  ISO 8601:2004 without milli is 20 Characters, with millis 24 */
@@ -2582,6 +2614,7 @@ DECODE_JSON(StatusCode) {
 static status
 VariantDimension_decodeJson(void * dst, const UA_DataType *type, 
                             CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
+    (void) type;
     const UA_DataType *dimType = &UA_TYPES[UA_TYPES_UINT32];
     return Array_decodeJson_internal((void**)dst, dimType, ctx, parseCtx, moveToken);
 }
@@ -2884,9 +2917,10 @@ DECODE_JSON(ExtensionObject) {
 static status
 Variant_decodeJsonUnwrapExtensionObject(UA_Variant *dst, const UA_DataType *type, 
                                         CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
+    (void) type, (void) moveToken;
     /*EXTENSIONOBJECT POSITION!*/
     UA_UInt16 old_index = parseCtx->index;
-    UA_Boolean typeIdFound = false;
+    UA_Boolean typeIdFound;
     
     /* Decode the DataType */
     UA_NodeId typeId;
@@ -3084,7 +3118,8 @@ decodeFields(CtxJson *ctx, ParseCtx *parseCtx, DecodeEntry *entries,
 static status
 Array_decodeJson_internal(void **dst, const UA_DataType *type, 
         CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
-    status ret = UA_STATUSCODE_GOOD;
+    (void) moveToken;
+    status ret;
     
     if(parseCtx->tokenArray[parseCtx->index].type != JSMN_ARRAY)
         return UA_STATUSCODE_BADDECODINGERROR;
@@ -3132,6 +3167,7 @@ Array_decodeJson(void * dst, const UA_DataType *type, CtxJson *ctx,
 static status
 decodeJsonStructure(void *dst, const UA_DataType *type, CtxJson *ctx, 
                     ParseCtx *parseCtx, UA_Boolean moveToken) {
+    (void) moveToken;
     /* Check the recursion limit */
     if(ctx->depth > UA_JSON_ENCODING_MAX_RECURSION)
         return UA_STATUSCODE_BADENCODINGERROR;
@@ -3176,6 +3212,7 @@ decodeJsonStructure(void *dst, const UA_DataType *type, CtxJson *ctx,
 static status
 decodeJsonNotImplemented(void *dst, const UA_DataType *type, CtxJson *ctx, 
                          ParseCtx *parseCtx, UA_Boolean moveToken) {
+    (void)dst, (void)type, (void)ctx, (void)parseCtx, (void)moveToken;
     return UA_STATUSCODE_BADNOTIMPLEMENTED;
 }