fix exit 66/16566/5
Anais AUBERT [Mon, 1 Jun 2015 15:13:25 +0000 (17:13 +0200)]
Change-Id: Ifb165a422fd15c1ed5eeb0a3a9f53c6d75729b68

scilab/modules/core/sci_gateway/cpp/sci_exit.cpp

index e43fcf7..f50f37d 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
+ *  Copyright (C) 2015 - Scilab Enterprises - Anais AUBERT
  *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
@@ -28,55 +29,57 @@ using namespace types;
 
 Function::ReturnValue sci_exit(typed_list &in, int _iRetCount, typed_list &out)
 {
-    // exit() or exit
-    if (in.size() == 0)
-    {
-        ConfigVariable::setForceQuit(true);
-        return Function::OK;
-    }
-
-    // More than one input argument => ERROR
-    if (in.size() != 1)
-    {
-        Scierror(77, _("%s: Wrong number of input argument(s): %d to %d expected."), "exit", 0, 1);
-        return Function::Error;
-    }
 
+    BOOL shouldExit = TRUE;
+    double dExit = 0;
     // in[0] Should be a scalar double value.
-    InternalType* pIT = in[0];
-    if (pIT->isDouble() == false)
+    if (in.size() > 1)
     {
-        Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), "exit", 1);
+        Scierror(999, _("%s: Wrong number of input argument(s): %d to %d expected."), "exit", 0, 1);
         return Function::Error;
     }
 
-    Double* pD = pIT->getAs<Double>();
-    if (pD->isScalar() == false)
+    if (in.size() != 0)
     {
-        Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), "exit", 1);
-        return Function::Error;
-    }
+        InternalType* pIT = in[0];
+        if (pIT->isDouble() == false)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), "exit", 1);
+            return Function::Error;
+        }
 
-    double dExit = pD->get(0);
-    if (dExit != (int) dExit)
-    {
-        Scierror(999, _("%s: Wrong value for input argument #%d: An integer value expected.\n"), "exit", 1);
-        return Function::Error;
+        Double* pD = pIT->getAs<Double>();
+        if (pD->isScalar() == false)
+        {
+            Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), "exit", 1);
+            return Function::Error;
+        }
+
+        dExit = pD->get(0);
+        if (dExit != (int) dExit)
+        {
+            Scierror(999, _("%s: Wrong value for input argument #%d: An integer value expected.\n"), "exit", 1);
+            return Function::Error;
+        }
     }
 
     if (ConfigVariable::getScilabMode() != SCILAB_NWNI)
     {
         if (in.size() == 0)
         {
-            //shouldExit = canCloseMainScilabObject();
+            shouldExit = canCloseMainScilabObject();
         }
         else
         {
-            //forceCloseMainScilabObject();
+
+            forceCloseMainScilabObject();
         }
     }
 
-    ConfigVariable::setExitStatus((int)dExit);
-    ConfigVariable::setForceQuit(true);
+    if (shouldExit)
+    {
+        ConfigVariable::setExitStatus((int)dExit);
+        ConfigVariable::setForceQuit(true);
+    }
     return Function::OK;
 }