Coverity #1247398, #1199692, #1321278, #1321279, #1321280, #1321281, #1097625 fixed...
[scilab.git] / scilab / modules / external_objects_java / sci_gateway / cpp / sci_jconvMatrixMethod.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
4  * Copyright (C) 2013 - Scilab Enterprises - Sylvestre Ledru
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 #include "ScilabJavaEnvironment.hxx"
18 #include "ScilabGateway.hxx"
19
20 extern "C" {
21 #include "configvariable_interface.h"
22 #include "Scierror.h"
23 #include "gw_external_objects_java.h"
24 }
25
26 using namespace org_scilab_modules_external_objects_java;
27 using namespace org_modules_external_objects;
28
29 int sci_jconvMatrixMethod(char * fname, void* pvApiCtx)
30 {
31     int envId;
32     char * type = 0;
33
34     CheckInputArgument(pvApiCtx, 0, 1);
35     CheckOutputArgument(pvApiCtx, 1, 1);
36     if (getWarningMode())
37     {
38         sciprint(_("%s: Function %s is obsolete.\n"), _("Warning"), fname);
39         sciprint(_("%s: Please see documentation for more details.\n"), _("Warning"));
40         sciprint(_("%s: This function will be permanently removed in Scilab %s\n\n"), _("Warning"), "6.0.0");
41     }
42
43     envId = ScilabJavaEnvironment::start();
44     JavaOptionsSetter setter = ScilabJavaEnvironment::getInstance()->getOptionsHelper().getSetter(JavaOptionsSetter::METHODOFCONV);
45     ScilabAbstractEnvironment & env = ScilabEnvironments::getEnvironment(envId);
46     ScilabGatewayOptions & options = env.getGatewayOptions();
47     OptionsHelper::setCopyOccurred(false);
48     ScilabObjects::initialization(env, pvApiCtx);
49     options.setIsNew(false);
50
51     if (Rhs == 0)
52     {
53         const char * order = setter.get() ? "rc" : "cr";
54         createMatrixOfString(pvApiCtx, Rhs + 1, 1, 1, &order);
55
56         LhsVar(1) = 1;
57         PutLhsVar();
58
59         return 0;
60     }
61
62     try
63     {
64         type = ScilabObjects::getSingleString(Rhs, pvApiCtx);
65     }
66     catch (const std::exception & e)
67     {
68         Scierror(999, "%s: String \"rc\" or \"cr\" expected.", fname);
69         return 0;
70     }
71
72     if (!strcmp(type, "rc"))
73     {
74         setter.set(true);
75     }
76     else if (!strcmp(type, "cr"))
77     {
78         setter.set(false);
79     }
80     else
81     {
82         FREE(type);
83         Scierror(999, "%s: Invalid string: \"rc\" or \"cr\" expected.", fname);
84         return 0;
85     }
86
87     FREE(type);
88
89     LhsVar(1) = 0;
90     PutLhsVar();
91
92     return 0;
93 }