Quellcode durchsuchen

NO_ALLOCA (added in nodemanagement service)

FlorianPalm vor 9 Jahren
Ursprung
Commit
1a03d0286d
2 geänderte Dateien mit 14 neuen und 5 gelöschten Zeilen
  1. 14 4
      src/server/ua_services_nodemanagement.c
  2. 0 1
      src/ua_util.h

+ 14 - 4
src/server/ua_services_nodemanagement.c

@@ -246,9 +246,14 @@ void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesR
     }
 
 #ifdef UA_EXTERNAL_NAMESPACES
+#ifdef NO_ALLOCA
+    UA_Boolean isExternal[size];
+    UA_UInt32 indices[size];
+#else
     UA_Boolean *isExternal = UA_alloca(sizeof(UA_Boolean) * size);
-    UA_memset(isExternal, UA_FALSE, sizeof(UA_Boolean) * size);
     UA_UInt32 *indices = UA_alloca(sizeof(UA_UInt32) * size);
+#endif /*NO_ALLOCA */
+    UA_memset(isExternal, UA_FALSE, sizeof(UA_Boolean) * size);
     for(size_t j = 0; j <server->externalNamespacesSize; j++) {
         size_t indexSize = 0;
         for(size_t i = 0;i < size;i++) {
@@ -292,9 +297,14 @@ void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddR
 	UA_memset(response->results, UA_STATUSCODE_GOOD, sizeof(UA_StatusCode) * size);
 
 #ifdef UA_EXTERNAL_NAMESPACES
-	UA_Boolean *isExternal = UA_alloca(sizeof(UA_Boolean) * size);
-	UA_memset(isExternal, UA_FALSE, sizeof(UA_Boolean) * size);
-	UA_UInt32 *indices = UA_alloca(sizeof(UA_UInt32) * size);
+#ifdef NO_ALLOCA
+    UA_Boolean isExternal[size];
+    UA_UInt32 indices[size];
+#else
+    UA_Boolean *isExternal = UA_alloca(sizeof(UA_Boolean) * size);
+    UA_UInt32 *indices = UA_alloca(sizeof(UA_UInt32) * size);
+#endif /*NO_ALLOCA */
+    UA_memset(isExternal, UA_FALSE, sizeof(UA_Boolean) * size);
 	for(size_t j = 0; j < server->externalNamespacesSize; j++) {
 		size_t indicesSize = 0;
 		for(size_t i = 0;i < size;i++) {

+ 0 - 1
src/ua_util.h

@@ -50,7 +50,6 @@
 #define UA_memset(ptr, value, size) memset(ptr, value, size)
 
 #ifdef NO_ALLOCA
-
 #else
 #ifdef _WIN32
     # define UA_alloca(SIZE) _alloca(SIZE)