[api_scilab] memory leak fixed in Struct API C++ 60/19260/1
Cedric Delamarre [Wed, 19 Apr 2017 09:36:43 +0000 (11:36 +0200)]
Change-Id: I16e7d8552f6ec781b96df6e159ab8969620e3ffa

scilab/modules/api_scilab/src/cpp/template/api_struct.hpp

index 4c6f50f..d76b6e3 100644 (file)
@@ -130,9 +130,16 @@ int API_PROTO(getFields)(scilabEnv env, scilabVar var, wchar_t***  fields)
         return STATUS_ERROR;
     }
 #endif
-    types::String* str = s->getFieldNames();
-    *fields = str->get();
-    return str->getSize();
+
+    std::unordered_map<std::wstring, int> fieldsMap = s->get(0)->getFields();
+    *fields = new wchar_t*[fieldsMap.size()];
+    int iter = 0;
+    for (const auto & field : fieldsMap)
+    {
+        (*fields)[iter++] = os_wcsdup(field.first.data());
+    }
+
+    return (int)fieldsMap.size();
 }
 
 /*data*/
@@ -193,4 +200,3 @@ scilabStatus API_PROTO(setStructMatrix2dData)(scilabEnv env, scilabVar var, cons
     types::SingleStruct* ss = s->get(s->getIndex(index));
     return ss->set(field, (types::InternalType*)data) ? STATUS_OK : STATUS_ERROR;
 }
-