Selaa lähdekoodia

fix a bug where generated, non-ns0 types were treated as builtin

Julius Pfrommer 9 vuotta sitten
vanhempi
commit
50310565b6
2 muutettua tiedostoa jossa 8 lisäystä ja 6 poistoa
  1. 5 3
      src/ua_types.c
  2. 3 3
      src/ua_types_encoding_binary.c

+ 5 - 3
src/ua_types.c

@@ -815,7 +815,8 @@ UA_StatusCode UA_DiagnosticInfo_copy(UA_DiagnosticInfo const *src, UA_Diagnostic
 /*******************/
 
 void UA_init(void *p, const UA_DataType *dataType) {
-    switch(dataType->typeIndex) {
+    /* builtin types */
+    switch(dataType->typeIndex + (0x8000 * !dataType->namespaceZero)) {
     case UA_TYPES_BOOLEAN:
     case UA_TYPES_SBYTE:
     case UA_TYPES_BYTE:
@@ -857,6 +858,7 @@ void UA_init(void *p, const UA_DataType *dataType) {
         return;
     }
 
+    /* structured types */
     uintptr_t ptr = (uintptr_t)p;
     UA_Byte membersSize = dataType->membersSize;
     for(size_t i = 0; i < membersSize; i++) {
@@ -892,7 +894,7 @@ UA_StatusCode UA_copy(const void *src, void *dst, const UA_DataType *dataType) {
         memcpy(dst, src, dataType->memSize);
         return UA_STATUSCODE_GOOD;
     }
-    switch(dataType->typeIndex) {
+    switch(dataType->typeIndex + (0x8000 * !dataType->namespaceZero)) {
     case UA_TYPES_NODEID:
         return UA_NodeId_copy((const UA_NodeId*)src, (UA_NodeId*)dst);
     case UA_TYPES_EXTENSIONOBJECT:
@@ -951,7 +953,7 @@ void UA_deleteMembers(void *p, const UA_DataType *dataType) {
 void UA_deleteMembersUntil(void *p, const UA_DataType *dataType, size_t lastMember) {
     if(dataType->fixedSize)
         return;
-    switch(dataType->typeIndex) {
+    switch(dataType->typeIndex + (0x8000 * !dataType->namespaceZero)) {
     case UA_TYPES_NODEID:
         UA_NodeId_deleteMembers((UA_NodeId*)p);
         return;

+ 3 - 3
src/ua_types_encoding_binary.c

@@ -931,7 +931,7 @@ UA_StatusCode UA_DiagnosticInfo_decodeBinary(UA_ByteString const *src, size_t *U
 UA_StatusCode UA_encodeBinary(const void *src, const UA_DataType *dataType, UA_ByteString *dst,
                               size_t *UA_RESTRICT offset) {
     /* builtin types */
-    switch (dataType->typeIndex) {
+    switch(dataType->typeIndex + (0x8000 * !dataType->namespaceZero)) {
     case UA_TYPES_BOOLEAN:
     case UA_TYPES_SBYTE:
     case UA_TYPES_BYTE:
@@ -998,7 +998,7 @@ UA_StatusCode UA_encodeBinary(const void *src, const UA_DataType *dataType, UA_B
 UA_StatusCode UA_decodeBinary(const UA_ByteString *src, size_t *UA_RESTRICT offset,
                               void *dst, const UA_DataType *dataType) {
     /* builtin types */
-    switch (dataType->typeIndex) {
+    switch(dataType->typeIndex + (0x8000 * !dataType->namespaceZero)) {
     case UA_TYPES_BOOLEAN:
     case UA_TYPES_SBYTE:
     case UA_TYPES_BYTE:
@@ -1231,7 +1231,7 @@ static size_t UA_DiagnosticInfo_calcSizeBinary(UA_DiagnosticInfo const *p) {
 
 size_t UA_calcSizeBinary(const void *p, const UA_DataType *dataType) {
     /* builtin types */
-    switch (dataType->typeIndex) {
+    switch(dataType->typeIndex + (0x8000 * !dataType->namespaceZero)) {
     case UA_TYPES_BOOLEAN:
     case UA_TYPES_SBYTE:
     case UA_TYPES_BYTE: