Bug 11244 fixed: there was an error due to browsevar when a global var is removed 70/8270/6
Calixte DENIZET [Mon, 23 Jul 2012 19:59:58 +0000 (21:59 +0200)]
Change-Id: If911924c2308e5e86bc9a68b77c06900e1203da2

scilab/CHANGES_5.4.X
scilab/modules/api_scilab/src/cpp/api_common.cpp
scilab/modules/ui_data/src/cpp/UpdateBrowseVar.cpp
scilab/modules/ui_data/tests/nonreg_tests/bug_11244.tst [new file with mode: 0644]

index cadc2e6..a03171b 100644 (file)
@@ -148,6 +148,9 @@ Bug Fixes
 
 * Bug #11203 fixed - Description for info output parameter was wrong in lsqrsolve help page.
 
+* Bug #11488 fixed - Error in console due to browsevar when deleting a global
+                     var.
+
 * Bug #11300 fixed - freson calculated wrong frequencies in scilab-5.3.3.
 
 * Bug #11328 fixed - strsplit returned a wrong error message when second input
index 8173717..ec258c8 100644 (file)
@@ -71,7 +71,9 @@ int returnArguments(void* _pvCtx)
 
 int checkInputArgument(void* _pvCtx, int _iMin, int _iMax)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
     /*
     * store the name in recu array, fname can be a non null terminated char array
@@ -100,7 +102,9 @@ int checkInputArgument(void* _pvCtx, int _iMin, int _iMax)
 /*--------------------------------------------------------------------------*/
 int checkInputArgumentAtLeast(void* _pvCtx, int _iMin)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
     if (_iMin <= nbInputArgument)
     {
@@ -114,7 +118,9 @@ int checkInputArgumentAtLeast(void* _pvCtx, int _iMin)
 /*--------------------------------------------------------------------------*/
 int checkInputArgumentAtMost(void* _pvCtx, int _iMax)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
     if (_iMax >= nbInputArgument)
     {
@@ -128,7 +134,9 @@ int checkInputArgumentAtMost(void* _pvCtx, int _iMax)
 /*--------------------------------------------------------------------------*/
 int checkOutputArgument(void* _pvCtx, int _iMin, int _iMax)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
 
     if (_iMin <= nbOutputArgument && _iMax >= nbOutputArgument)
@@ -151,7 +159,9 @@ int checkOutputArgument(void* _pvCtx, int _iMin, int _iMax)
 /*--------------------------------------------------------------------------*/
 int checkOutputArgumentAtLeast(void* _pvCtx, int _iMin)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
     if (_iMin <= nbOutputArgument)
     {
@@ -165,7 +175,9 @@ int checkOutputArgumentAtLeast(void* _pvCtx, int _iMin)
 /*--------------------------------------------------------------------------*/
 int checkOutputArgumentAtMost(void* _pvCtx, int _iMax)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
     if (_iMax >= nbOutputArgument)
     {
@@ -186,7 +198,9 @@ int callOverloadFunction(void* _pvCtx, int _iVar, char* _pstName, unsigned int _
 /*--------------------------------------------------------------------------*/
 SciErr getVarDimension(void *_pvCtx, int *_piAddress, int *_piRows, int *_piCols)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
     if (_piAddress != NULL && isVarMatrixType(_pvCtx, _piAddress))
     {
@@ -212,7 +226,9 @@ SciErr getVarDimension(void *_pvCtx, int *_piAddress, int *_piRows, int *_piCols
 /*--------------------------------------------------------------------------*/
 SciErr getNamedVarDimension(void *_pvCtx, const char *_pstName, int *_piRows, int *_piCols)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int *piAddr = NULL;
 
     sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr);
@@ -235,7 +251,9 @@ SciErr getNamedVarDimension(void *_pvCtx, const char *_pstName, int *_piRows, in
 /*--------------------------------------------------------------------------*/
 SciErr getVarAddressFromPosition(void *_pvCtx, int _iVar, int **_piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iAddr = 0;
     int iValType = 0;
 
@@ -243,7 +261,7 @@ SciErr getVarAddressFromPosition(void *_pvCtx, int _iVar, int **_piAddress)
     if (_iVar > Rhs && _iVar > Nbvars)
     {
         addErrorMessage(&sciErr, API_ERROR_INVALID_POSITION, _("%s: bad call to %s! (1rst argument).\n"), ((StrCtx *) _pvCtx)->pstName,
-            "getVarAddressFromPosition");
+                        "getVarAddressFromPosition");
         return sciErr;
     }
 
@@ -262,7 +280,9 @@ SciErr getVarAddressFromPosition(void *_pvCtx, int _iVar, int **_piAddress)
 /*--------------------------------------------------------------------------*/
 SciErr getVarNameFromPosition(void *_pvCtx, int _iVar, char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNameLen = 0;
     int iJob1 = 1;
 
@@ -288,7 +308,9 @@ int getNewVarAddressFromPosition(void *_pvCtx, int _iVar, int **_piAddress)
 /*--------------------------------------------------------------------------*/
 SciErr getVarAddressFromName(void *_pvCtx, const char *_pstName, int **_piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iVarID[nsiz];
     int *piAddr = NULL;
 
@@ -296,7 +318,7 @@ SciErr getVarAddressFromName(void *_pvCtx, const char *_pstName, int **_piAddres
     C2F(str2name) (_pstName, iVarID, (int)strlen(_pstName));
 
     //define scope of search
-    Fin = -1;
+    Fin = -6;
     Err = 0;
     //search variable
     C2F(stackg) (iVarID);
@@ -333,7 +355,9 @@ SciErr getVarAddressFromName(void *_pvCtx, const char *_pstName, int **_piAddres
 /*--------------------------------------------------------------------------*/
 SciErr getVarType(void *_pvCtx, int *_piAddress, int *_piType)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
     if (_piAddress == NULL)
     {
@@ -348,7 +372,9 @@ SciErr getVarType(void *_pvCtx, int *_piAddress, int *_piType)
 /*--------------------------------------------------------------------------*/
 SciErr getNamedVarType(void *_pvCtx, const char *_pstName, int *_piType)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int *piAddr = NULL;
 
     sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr);
@@ -381,13 +407,13 @@ int isVarComplex(void *_pvCtx, int *_piAddress)
     getVarType(_pvCtx, _piAddress, &iType);
     switch (iType)
     {
-    case sci_matrix:
-    case sci_poly:
-    case sci_sparse:
-        iComplex = _piAddress[3];
-        break;
-    default:
-        iComplex = 0;
+        case sci_matrix:
+        case sci_poly:
+        case sci_sparse:
+            iComplex = _piAddress[3];
+            break;
+        default:
+            iComplex = 0;
     }
     return iComplex;
 }
@@ -395,7 +421,9 @@ int isVarComplex(void *_pvCtx, int *_piAddress)
 /*--------------------------------------------------------------------------*/
 int isNamedVarComplex(void *_pvCtx, const char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int *piAddr = NULL;
 
     sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr);
@@ -440,18 +468,18 @@ int isVarMatrixType(void *_pvCtx, int *_piAddress)
 
         switch (iType)
         {
-        case sci_matrix:
-        case sci_poly:
-        case sci_boolean:
-        case sci_sparse:
-        case sci_boolean_sparse:
-        case sci_matlab_sparse:
-        case sci_ints:
-        case sci_handles:
-        case sci_strings:
-            return 1;
-        default:
-            return 0;
+            case sci_matrix:
+            case sci_poly:
+            case sci_boolean:
+            case sci_sparse:
+            case sci_boolean_sparse:
+            case sci_matlab_sparse:
+            case sci_ints:
+            case sci_handles:
+            case sci_strings:
+                return 1;
+            default:
+                return 0;
         }
     }
     else
@@ -464,7 +492,9 @@ int isVarMatrixType(void *_pvCtx, int *_piAddress)
 /*--------------------------------------------------------------------------*/
 int isNamedVarMatrixType(void *_pvCtx, const char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int *piAddr = NULL;
 
     sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr);
@@ -478,7 +508,9 @@ int isNamedVarMatrixType(void *_pvCtx, const char *_pstName)
 /*--------------------------------------------------------------------------*/
 SciErr getProcessMode(void *_pvCtx, int _iPos, int *_piAddRef, int *_piMode)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows1 = 0;
     int iCols1 = 0;
     int iRows2 = 0;
@@ -522,7 +554,7 @@ SciErr getProcessMode(void *_pvCtx, int _iPos, int *_piAddRef, int *_piMode)
         if (iRows2 != 1 || iCols2 != 1)
         {
             addErrorMessage(&sciErr, API_ERROR_GET_PROCESSMODE, _("%s: Wrong size for argument %d: (%d,%d) expected.\n"), "getProcessMode", _iPos, 1,
-                1);
+                            1);
             return sciErr;
         }
 
@@ -543,7 +575,7 @@ SciErr getProcessMode(void *_pvCtx, int _iPos, int *_piAddRef, int *_piMode)
         if (iRows2 != 1 || iCols2 != 1)
         {
             addErrorMessage(&sciErr, API_ERROR_GET_PROCESSMODE, _("%s: Wrong size for argument %d: (%d,%d) expected.\n"), "getProcessMode", _iPos, 1,
-                1);
+                            1);
             return sciErr;
         }
 
@@ -568,7 +600,7 @@ SciErr getProcessMode(void *_pvCtx, int _iPos, int *_piAddRef, int *_piMode)
     else
     {
         addErrorMessage(&sciErr, API_ERROR_GET_PROCESSMODE, _("%s: Wrong type for input argument #%d: A string or a scalar expected.\n"),
-            "getProcessMode", _iPos);
+                        "getProcessMode", _iPos);
         return sciErr;
     }
 
@@ -589,7 +621,7 @@ SciErr getProcessMode(void *_pvCtx, int _iPos, int *_piAddRef, int *_piMode)
     else
     {
         addErrorMessage(&sciErr, API_ERROR_GET_PROCESSMODE, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), "getProcessMode",
-            _iPos, "'*', 'r', 'c', 'm', '0', '1', '2'", "-1");
+                        _iPos, "'*', 'r', 'c', 'm', '0', '1', '2'", "-1");
         return sciErr;
     }
     return sciErr;
@@ -598,7 +630,9 @@ SciErr getProcessMode(void *_pvCtx, int _iPos, int *_piAddRef, int *_piMode)
 /*--------------------------------------------------------------------------*/
 SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iType = 0;
     int iRows = 0;
     int iCols = 0;
@@ -616,7 +650,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
         if (isVarComplex(_pvCtx, _piAddress))
         {
             addErrorMessage(&sciErr, API_ERROR_GET_DIMFROMVAR, _("%s: Wrong type for argument %d: Real matrix expected.\n"), "getDimFromVar",
-                getRhsFromAddress(_pvCtx, _piAddress));
+                            getRhsFromAddress(_pvCtx, _piAddress));
             return sciErr;
         }
 
@@ -643,7 +677,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
         if (iRows != 1 || iCols != 1)
         {
             addErrorMessage(&sciErr, API_ERROR_GET_DIMFROMVAR, _("%s: Wrong size for argument %d: (%d,%d) expected.\n"), "getProcessMode",
-                getRhsFromAddress(_pvCtx, _piAddress), 1, 1);
+                            getRhsFromAddress(_pvCtx, _piAddress), 1, 1);
             return sciErr;
         }
 
@@ -656,7 +690,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
 
         switch (iPrec)
         {
-        case SCI_INT8:
+            case SCI_INT8:
             {
                 char *pcData = NULL;
 
@@ -669,7 +703,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
                 *_piVal = pcData[0];
             }
             break;
-        case SCI_UINT8:
+            case SCI_UINT8:
             {
                 unsigned char *pucData = NULL;
 
@@ -682,7 +716,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
                 *_piVal = pucData[0];
             }
             break;
-        case SCI_INT16:
+            case SCI_INT16:
             {
                 short *psData = NULL;
 
@@ -695,7 +729,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
                 *_piVal = psData[0];
             }
             break;
-        case SCI_UINT16:
+            case SCI_UINT16:
             {
                 unsigned short *pusData = NULL;
 
@@ -708,7 +742,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
                 *_piVal = pusData[0];
             }
             break;
-        case SCI_INT32:
+            case SCI_INT32:
             {
                 int *piData = NULL;
 
@@ -721,7 +755,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
                 *_piVal = piData[0];
             }
             break;
-        case SCI_UINT32:
+            case SCI_UINT32:
             {
                 unsigned int *puiData = NULL;
 
@@ -739,7 +773,7 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
     else
     {
         addErrorMessage(&sciErr, API_ERROR_GET_DIMFROMVAR, _("%s: Wrong type for input argument #%d: A real scalar or an integer scalar expected.\n"),
-            "getDimFromVar", getRhsFromAddress(_pvCtx, _piAddress));
+                        "getDimFromVar", getRhsFromAddress(_pvCtx, _piAddress));
         return sciErr;
     }
     return sciErr;
@@ -748,14 +782,16 @@ SciErr getDimFromVar(void *_pvCtx, int *_piAddress, int *_piVal)
 /*--------------------------------------------------------------------------*/
 SciErr getDimFromNamedVar(void *_pvCtx, const char *_pstName, int *_piVal)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int *piAddr = NULL;
 
     sciErr = getVarAddressFromName(_pvCtx, _pstName, &piAddr);
     if (sciErr.iErr)
     {
         addErrorMessage(&sciErr, API_ERROR_GET_NAMED_DIMFROMVAR, _("%s: Unable to get dimension from variable \"%s\""), "getDimFromNamedVar",
-            _pstName);
+                        _pstName);
         return sciErr;
     }
 
@@ -763,7 +799,7 @@ SciErr getDimFromNamedVar(void *_pvCtx, const char *_pstName, int *_piVal)
     if (sciErr.iErr)
     {
         addErrorMessage(&sciErr, API_ERROR_GET_NAMED_DIMFROMVAR, _("%s: Unable to get dimension from variable \"%s\""), "getDimFromNamedVar",
-            _pstName);
+                        _pstName);
         return sciErr;
     }
 
@@ -792,7 +828,9 @@ int getRhsFromAddress(void *_pvCtx, int *_piAddress)
 /*--------------------------------------------------------------------------*/
 int isRowVector(void *_pvCtx, int *_piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -825,7 +863,9 @@ int isRowVector(void *_pvCtx, int *_piAddress)
 /*--------------------------------------------------------------------------*/
 int isNamedRowVector(void *_pvCtx, const char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -853,7 +893,9 @@ int isNamedRowVector(void *_pvCtx, const char *_pstName)
 /*--------------------------------------------------------------------------*/
 int isColumnVector(void *_pvCtx, int *_piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -886,7 +928,9 @@ int isColumnVector(void *_pvCtx, int *_piAddress)
 /*--------------------------------------------------------------------------*/
 int isNamedColumnVector(void *_pvCtx, const char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -926,7 +970,9 @@ int isNamedVector(void *_pvCtx, const char *_pstName)
 /*--------------------------------------------------------------------------*/
 int isScalar(void *_pvCtx, int *_piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -959,7 +1005,9 @@ int isScalar(void *_pvCtx, int *_piAddress)
 /*--------------------------------------------------------------------------*/
 int isNamedScalar(void *_pvCtx, const char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -987,7 +1035,9 @@ int isNamedScalar(void *_pvCtx, const char *_pstName)
 /*--------------------------------------------------------------------------*/
 int isSquareMatrix(void *_pvCtx, int *_piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -1020,7 +1070,9 @@ int isSquareMatrix(void *_pvCtx, int *_piAddress)
 /*--------------------------------------------------------------------------*/
 int isNamedSquareMatrix(void *_pvCtx, const char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -1048,7 +1100,9 @@ int isNamedSquareMatrix(void *_pvCtx, const char *_pstName)
 /*--------------------------------------------------------------------------*/
 int checkVarDimension(void *_pvCtx, int *_piAddress, int _iRows, int _iCols)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -1081,7 +1135,9 @@ int checkVarDimension(void *_pvCtx, int *_piAddress, int _iRows, int _iCols)
 /*--------------------------------------------------------------------------*/
 int checkNamedVarDimension(void *_pvCtx, const char *_pstName, int _iRows, int _iCols)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iRows = 0;
     int iCols = 0;
 
@@ -1109,7 +1165,9 @@ int checkNamedVarDimension(void *_pvCtx, const char *_pstName, int _iRows, int _
 /*--------------------------------------------------------------------------*/
 int checkVarType(void *_pvCtx, int *_piAddress, int _iType)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iType = 0;
 
     if (_piAddress == NULL)
@@ -1134,7 +1192,9 @@ int checkVarType(void *_pvCtx, int *_piAddress, int _iType)
 /*--------------------------------------------------------------------------*/
 int checkNamedVarType(void *_pvCtx, const char *_pstName, int _iType)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iType = 0;
 
     sciErr = getNamedVarType(_pvCtx, _pstName, &iType);
@@ -1174,7 +1234,9 @@ int isNamedEmptyMatrix(void *_pvCtx, const char *_pstName)
 /*--------------------------------------------------------------------------*/
 int createEmptyMatrix(void *_pvCtx, int _iVar)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     double dblReal = 0;
 
     sciErr = createMatrixOfDouble(_pvCtx, _iVar, 0, 0, &dblReal);
@@ -1191,7 +1253,9 @@ int createEmptyMatrix(void *_pvCtx, int _iVar)
 /*--------------------------------------------------------------------------*/
 int createNamedEmptyMatrix(void *_pvCtx, const char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     double dblOne = 0;
 
     sciErr = createNamedMatrixOfDouble(_pvCtx, _pstName, 0, 0, &dblOne);
@@ -1208,7 +1272,9 @@ int createNamedEmptyMatrix(void *_pvCtx, const char *_pstName)
 /*--------------------------------------------------------------------------*/
 int isNamedVarExist(void *_pvCtx, const char *_pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iVarID[nsiz];
     int *piAddr = NULL;
     int funs = C2F(com).fun;
@@ -1264,7 +1330,9 @@ int checkNamedVarFormat(void* _pvCtx, const char *_pstName)
 /*--------------------------------------------------------------------------*/
 int deleteNamedVariable(void* _pvCtx, const char* _pstName)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iVarID[nsiz];
     int iZero = 0;
     int il;
@@ -1272,7 +1340,7 @@ int deleteNamedVariable(void* _pvCtx, const char* _pstName)
     int sLhs = Lhs;
     int sTop = Top;
 
-    if(isNamedVarExist(_pvCtx, _pstName) == 0)
+    if (isNamedVarExist(_pvCtx, _pstName) == 0)
     {
         return 0;
     }
@@ -1290,7 +1358,7 @@ int deleteNamedVariable(void* _pvCtx, const char* _pstName)
     Top = Top + 1;
     il = iadr(*Lstk(Top));
     *istk(il) = 0;
-    *Lstk(Top+1) = *Lstk(Top) + 1;
+    *Lstk(Top + 1) = *Lstk(Top) + 1;
     Rhs = 0;
 
     //Replace existing value by null matrix to delete it
@@ -1298,7 +1366,7 @@ int deleteNamedVariable(void* _pvCtx, const char* _pstName)
     Rhs = sRhs;
     Lhs = sLhs;
     Top = sTop ;
-    if(C2F(iop).err > 0/* || C2F(errgst).err1 > 0*/)
+    if (C2F(iop).err > 0/* || C2F(errgst).err1 > 0*/)
     {
         return 0;
     }
index 02441e6..68eba7a 100644 (file)
@@ -44,6 +44,7 @@ static std::set < string > createScilabDefaultVariablesSet();
 /*--------------------------------------------------------------------------*/
 void UpdateBrowseVar(BOOL update)
 {
+    SciErr err;
     int iGlobalVariablesUsed = 0;
     int iGlobalVariablesTotal = 0;
     int iLocalVariablesUsed = 0;
@@ -71,19 +72,19 @@ void UpdateBrowseVar(BOOL update)
     std::set < string > scilabDefaultVariablesSet = createScilabDefaultVariablesSet();
 
     // for each local variable get informations
-    for (i = 0; i < iLocalVariablesUsed; ++i)
+    for (; i < iLocalVariablesUsed; ++i)
     {
         // name
         pstAllVariableNames[i] = getLocalNamefromId(i + 1);
         // type
-        getNamedVarType(pvApiCtx, pstAllVariableNames[i], &piAllVariableTypes[i]);
-        // Bytes used
-        piAllVariableBytes[i] = getLocalSizefromId(i);
-
-        // Sizes of the variable
-        getNamedVarDimension(pvApiCtx, pstAllVariableNames[i], &nbRows, &nbCols);
+        err = getNamedVarType(pvApiCtx, pstAllVariableNames[i], &piAllVariableTypes[i]);
+        if (!err.iErr)
+        {
+            piAllVariableBytes[i] = getLocalSizefromId(i);
+            err = getNamedVarDimension(pvApiCtx, pstAllVariableNames[i], &nbRows, &nbCols);
+        }
 
-        if (nbRows * nbCols == 0)
+        if (err.iErr || nbRows * nbCols == 0)
         {
 #define N_A "N/A"
             pstAllVariableSizes[i] = (char *)MALLOC((sizeof(N_A) + 1) * sizeof(char));
@@ -91,7 +92,8 @@ void UpdateBrowseVar(BOOL update)
         }
         else
         {
-            sizeStr = (char *)MALLOC((sizeof(nbRows) + sizeof(nbCols) + strlen("x") + 1) * sizeof(char));
+            // 11 =strlen("2147483647")+1 (1 for security)
+            sizeStr = (char *)MALLOC((11 + 11 + 1 + 1) * sizeof(char));
             sprintf(sizeStr, "%dx%d", nbRows, nbCols);
             pstAllVariableSizes[i] = strdup(sizeStr);
             FREE(sizeStr);
@@ -101,7 +103,7 @@ void UpdateBrowseVar(BOOL update)
         pstAllVariableVisibility[i] = strdup("local");
 
         if (scilabDefaultVariablesSet.find(string(pstAllVariableNames[i])) == scilabDefaultVariablesSet.end() && piAllVariableTypes[i] != sci_c_function    /*TODO: voir si je fais sauter ou pas */
-            && piAllVariableTypes[i] != sci_lib)
+                && piAllVariableTypes[i] != sci_lib)
         {
             piAllVariableFromUser[i] = TRUE;
         }
@@ -128,7 +130,8 @@ void UpdateBrowseVar(BOOL update)
 
         // Sizes of the variable
         getNamedVarDimension(pvApiCtx, pstAllVariableNames[i], &nbRows, &nbCols);
-        sizeStr = (char *)MALLOC((sizeof(nbRows) + sizeof(nbCols) + strlen("x") + 1) * sizeof(char));
+        // 11 =strlen("2147483647")+1 (1 for security)
+        sizeStr = (char *)MALLOC((11 + 11 + 1 + 1) * sizeof(char));
         sprintf(sizeStr, "%dx%d", nbRows, nbCols);
         pstAllVariableSizes[i] = strdup(sizeStr);
         FREE(sizeStr);
@@ -137,7 +140,7 @@ void UpdateBrowseVar(BOOL update)
         pstAllVariableVisibility[i] = strdup("global");
 
         if (scilabDefaultVariablesSet.find(string(pstAllVariableNames[i])) == scilabDefaultVariablesSet.end()
-            && piAllVariableTypes[i] != sci_c_function && piAllVariableTypes[i] != sci_lib)
+                && piAllVariableTypes[i] != sci_c_function && piAllVariableTypes[i] != sci_lib)
         {
             piAllVariableFromUser[i] = TRUE;
         }
@@ -182,40 +185,40 @@ void UpdateBrowseVar(BOOL update)
 static std::set < string > createScilabDefaultVariablesSet()
 {
     string arr[] = { "home",
-        "PWD",
-        "%tk",
-        "%pvm",
-        "MSDOS",
-        "%F",
-        "%T",
-        "%f",
-        "%t",
-        "%e",
-        "%pi",
-        "%modalWarning",
-        "%exportFileName",
-        "%nan",
-        "%inf",
-        "SCI",
-        "WSCI",
-        "SCIHOME",
-        "TMPDIR",
-        "%gui",
-        "%fftw",
-        "%helps",
-        "%eps",
-        "%io",
-        "%i",
-        "demolist",
-        "%z",
-        "%s",
-        "$",
-        "%driverName",
-        "%toolboxes",
-        "%toolboxes_dir",
-        "TICTOC",
-        "%helps_modules"
-    };
+                     "PWD",
+                     "%tk",
+                     "%pvm",
+                     "MSDOS",
+                     "%F",
+                     "%T",
+                     "%f",
+                     "%t",
+                     "%e",
+                     "%pi",
+                     "%modalWarning",
+                     "%exportFileName",
+                     "%nan",
+                     "%inf",
+                     "SCI",
+                     "WSCI",
+                     "SCIHOME",
+                     "TMPDIR",
+                     "%gui",
+                     "%fftw",
+                     "%helps",
+                     "%eps",
+                     "%io",
+                     "%i",
+                     "demolist",
+                     "%z",
+                     "%s",
+                     "$",
+                     "%driverName",
+                     "%toolboxes",
+                     "%toolboxes_dir",
+                     "TICTOC",
+                     "%helps_modules"
+                   };
     int i = 0;
 
 #define NBELEMENT 33
diff --git a/scilab/modules/ui_data/tests/nonreg_tests/bug_11244.tst b/scilab/modules/ui_data/tests/nonreg_tests/bug_11244.tst
new file mode 100644 (file)
index 0000000..ca23180
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- INTERACTIVE TEST -->
+//
+// <-- Non-regression test for bug 11244 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/11244
+//
+// <-- Short Description -->
+// There was an error with browsevar when deleting a global var
+
+// Be sure thre browsevar is opened
+
+global a
+clearglobal a
+b=2
+
+// No error in console.
\ No newline at end of file