Revert "api_scilab: fix memory leak on SciErr structs" 61/11261/1
Antoine ELIAS [Thu, 11 Apr 2013 13:06:55 +0000 (15:06 +0200)]
 -> causes crash on some api functions
 -> to test : importXcosDiagram("SCI/modules\xcos\demos\Simple_Demo.zcos")

This reverts commit 5bc0579f31dcde3ffa453495ab7add442c85a2e9.

Change-Id: Ifdbb0a0dd21a6043fffa5648f30ffcec25ec083a

scilab/modules/api_scilab/includes/api_common.h
scilab/modules/api_scilab/src/cpp/api_error.cpp

index 37e61d0..4420fcc 100644 (file)
@@ -27,13 +27,12 @@ extern "C" {
      */
 
 #define MESSAGE_STACK_SIZE 5
-#define ERROR_MESSAGE_SIZE 4096
 
     typedef struct api_Err
     {
         int iErr; /**< The error ID */
         int iMsgCount; /**< Error level */
-        char pstMsg[MESSAGE_STACK_SIZE][ERROR_MESSAGE_SIZE]; /**< The error message */
+        char* pstMsg[MESSAGE_STACK_SIZE]; /**< The error message */
     } SciErr;
 
     typedef struct api_Ctx
@@ -54,7 +53,7 @@ extern "C" {
 #include "api_scilab.h"
     /* generics functions */
 
-    /*Rhs*/
+/*Rhs*/
     int* getNbInputArgument(void* _pvCtx);
 #define nbInputArgument(PVCTX) (*getNbInputArgument(PVCTX))
 
@@ -63,7 +62,7 @@ extern "C" {
 #endif
 #define Rhs (*getNbInputArgument(pvApiCtx))
 
-    /*Top*/
+/*Top*/
     int* getNbArgumentOnStack(void* _pvCtx);
 #define nbArgumentOnStack(PVCTX) (*getNbArgumentOnStack(PVCTX))
 
@@ -72,7 +71,7 @@ extern "C" {
 #endif
 #define Top (*getNbArgumentOnStack(pvApiCtx))
 
-    /*Lhs*/
+/*Lhs*/
     int* getNbOutputArgument(void* _pvCtx);
 #define nbOutputArgument(PVCTX) (*getNbOutputArgument(PVCTX))
 #ifdef Lhs
@@ -80,7 +79,7 @@ extern "C" {
 #endif
 #define Lhs (*getNbOutputArgument(pvApiCtx))
 
-    /*PutLhs*/
+/*PutLhs*/
     int* assignOutputVariable(void* _pvCtx, int _iVal);
 #define AssignOutputVariable(PVCTX, x) (*assignOutputVariable(PVCTX, x))
 #ifdef LhsVar
@@ -88,7 +87,7 @@ extern "C" {
 #endif
 #define LhsVar(x) (*assignOutputVariable(pvApiCtx, x))
 
-    /*PutLhsVar*/
+/*PutLhsVar*/
     int returnArguments(void* _pvCtx);
 #define ReturnArguments(PVCTX) if (! returnArguments(PVCTX)) { return 0; }
 #ifdef PutLhsVar
index c9119b1..afe9f8d 100644 (file)
@@ -80,15 +80,16 @@ int addErrorMessage(SciErr* _psciErr, int _iErr, const char* _pstMsg, ...)
     if (_psciErr->iMsgCount >= MESSAGE_STACK_SIZE)
     {
         // no more space, shift error messages
+        FREE(_psciErr->pstMsg[0]);
         for (int i = 1; i < MESSAGE_STACK_SIZE; i++)
         {
-            strcpy(_psciErr->pstMsg[i - 1], _psciErr->pstMsg[i]);
+            _psciErr->pstMsg[i - 1] = _psciErr->pstMsg[i];
         }
-        strcpy(_psciErr->pstMsg[MESSAGE_STACK_SIZE - 1], pstMsg);
+        _psciErr->pstMsg[MESSAGE_STACK_SIZE - 1] = strdup(pstMsg);
     }
     else
     {
-        strcpy(_psciErr->pstMsg[_psciErr->iMsgCount++], pstMsg);
+        _psciErr->pstMsg[_psciErr->iMsgCount++] = strdup(pstMsg);
     }
 
     _psciErr->iErr = _iErr;