Scicos gateways: fix for getscicosvars 27/16727/1
Paul Bignier [Thu, 25 Jun 2015 13:02:58 +0000 (15:02 +0200)]
 * The gateway attempted to retrieve getSize() of a nullptr (is scicosim is not running, no state is saved)

Change-Id: I0c00ff9f730c4139f6c51c14670b0c6a7edb33a9

scilab/modules/scicos/sci_gateway/cpp/sci_getscicosvars.cpp
scilab/modules/scicos/tests/unit_tests/getscicosvars.dia.ref
scilab/modules/scicos/tests/unit_tests/getscicosvars.tst

index 70ba5ad..8949356 100644 (file)
 extern "C"
 {
 #include "sciprint.h"
+#include "scicos-def.h"
 #include "charEncoding.h"
 #include "Scierror.h"
 #include "localization.h"
 #include "import.h"
+
+    /*--------------------------------------------------------------------------*/
+    // Variable defined in sci_scicosim.cpp
+    extern COSIM_struct C2F(cosim);
+    /*--------------------------------------------------------------------------*/
 }
 
 #include "il_state.hxx"
@@ -93,6 +99,13 @@ types::Function::ReturnValue sci_getscicosvars(types::typed_list &in, int _iRetC
         return types::Function::Error;
     }
 
+    int isrun = C2F(cosim).isrun;
+    if (!isrun)
+    {
+        Scierror(999, _("%s: scicosim is not running.\n"), funname.data());
+        return types::Function::Error;
+    }
+
     bool ok;
     // Define accepted entries of getscicosvars -please update me-
     const std::vector<const char*> entry
@@ -349,7 +362,7 @@ types::Function::ReturnValue sci_getscicosvars(types::typed_list &in, int _iRetC
                  (strcmp(field, "pointi") == 0)      /* retrieve nelem */
                 )
         {
-            /* Retrieve dims and 'prt' of asked array with getscicosvarsfromimport() */
+            /* Retrieve dims and 'ptr' of asked array with getscicosvarsfromimport() */
             void* ptr = nullptr;
             int nv, mv;
             ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
@@ -376,7 +389,7 @@ types::Function::ReturnValue sci_getscicosvars(types::typed_list &in, int _iRetC
                  (strcmp(field, "hmax") == 0)      /* retrieve hmax   */
                 )
         {
-            /* Retrieve dims and 'prt' of asked array with getscicosvarsfromimport() */
+            /* Retrieve dims and 'ptr' of asked array with getscicosvarsfromimport() */
             void* ptr = nullptr;
             int nv, mv;
             ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
@@ -394,7 +407,7 @@ types::Function::ReturnValue sci_getscicosvars(types::typed_list &in, int _iRetC
         *************************************************/
         else if (strcmp(field, "blocks") == 0)
         {
-            /* Retrieve scicos_block 'prt' of asked array with getscicosvarsfromimport() */
+            /* Retrieve scicos_block 'ptr' of asked array with getscicosvarsfromimport() */
             void* ptr = nullptr;
             int nv, mv;
             ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
@@ -479,7 +492,7 @@ types::Function::ReturnValue sci_getscicosvars(types::typed_list &in, int _iRetC
         *******************************************/
         else if ((strcmp(field, "outtb_elem") == 0)) /* retrieve outtb_elem */
         {
-            /* Retrieve dims and prt of asked array with getscicosvarsfromimport */
+            /* Retrieve dims and 'ptr' of asked array with getscicosvarsfromimport */
             void* ptr = nullptr;
             int nv, mv;
             ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
index 8898464..e294e7e 100644 (file)
@@ -7,9 +7,5 @@
 // =============================================================================
 //
 // <-- CLI SHELL MODE -->
-refMsg = msprintf(_("%s: Undefined field in string matrix position : %d\n"), "getscicosvars", 2);
-assert_checkerror("getscicosvars([""x"" ""fake""])", refMsg);
-assert_checkerror: Assertion failed: expected error message = "getscicosvars: Undefined field in string matrix position : 2" while computed error message = "getscicosvars: Undefined field in string matrix position: 2.".
-at line   120 of function assert_checkerror called by :
-assert_checkerror("getscicosvars([""x"" ""fake""])", refMsg)
-at line    25 of exec file called by :
+refMsg = msprintf(_("%s: scicosim is not running.\n"), "getscicosvars");
+assert_checkerror("getscicosvars([""x"" ""blocks""])", refMsg);
index eb74f97..9649248 100644 (file)
@@ -8,8 +8,5 @@
 //
 // <-- CLI SHELL MODE -->
 
-refMsg = msprintf(_("%s: Undefined field in string matrix position : %d\n"), "getscicosvars", 2);
-assert_checkerror("getscicosvars([""x"" ""fake""])", refMsg);
-
-refMsg = msprintf(_("%s: Error with parameter ""%s"".\n"), "getscicosvars", "x");
+refMsg = msprintf(_("%s: scicosim is not running.\n"), "getscicosvars");
 assert_checkerror("getscicosvars([""x"" ""blocks""])", refMsg);