Coverity #1321256, #1321259 fixed
[scilab.git] / scilab / modules / preferences / sci_gateway / cpp / sci_addModulePreferences.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #include "ScilabPreferences.hxx"
17 #include "GiwsException.hxx"
18 #include "preferences_gw.hxx"
19
20 extern "C"
21 {
22 #include "Scierror.h"
23 #include "api_scilab.h"
24 #include "localization.h"
25 #include "getScilabJavaVM.h"
26 #include "expandPathVariable.h"
27 #include "sci_malloc.h"
28 }
29
30 using namespace org_scilab_modules_preferences;
31
32 /*--------------------------------------------------------------------------*/
33 int sci_addModulePreferences(char * fname, void *pvApiCtx)
34 {
35     SciErr err;
36     int * addr = 0;
37     char * tbxName = 0;
38     char * tbxPath = 0;
39     char * expTbxPath = 0;
40     char * tbxPrefFile = 0;
41     char * expTbxPrefFile = 0;
42     char ** array[] = {&tbxName, &tbxPath, &tbxPrefFile};
43     bool error = false;
44
45     CheckLhs(1, 1);
46     CheckRhs(3, 3);
47
48     for (int i = 0; i < Rhs; i++)
49     {
50         err = getVarAddressFromPosition(pvApiCtx, i + 1, &addr);
51         if (err.iErr)
52         {
53             printError(&err, 0);
54             return 0;
55         }
56
57         if (!isStringType(pvApiCtx, addr))
58         {
59             Scierror(999, gettext("%s: Wrong type for input argument #%i: string expected.\n"), fname, i + 1);
60             for (int j = 0; j < i; j++)
61             {
62                 if (array[j])
63                 {
64                     freeAllocatedSingleString(*(array[j]));
65                 }
66             }
67             return 0;
68         }
69
70         if (getAllocatedSingleString(pvApiCtx, addr, array[i]))
71         {
72             return 0;
73         }
74     }
75
76     expTbxPath = expandPathVariable(const_cast<char *>(tbxPath));
77     expTbxPrefFile = expandPathVariable(const_cast<char *>(tbxPrefFile));
78
79     try
80     {
81         ScilabPreferences::addToolboxInfos(getScilabJavaVM(), tbxName, expTbxPath, expTbxPrefFile);
82     }
83     catch (const GiwsException::JniException & e)
84     {
85         Scierror(999, "%s: %s", fname, e.getJavaDescription().c_str());
86         for (int i = 0; i < Rhs; i++)
87         {
88             if (array[i])
89             {
90                 freeAllocatedSingleString(*(array[i]));
91             }
92         }
93         FREE(expTbxPath);
94         FREE(expTbxPrefFile);
95
96         return 0;
97     }
98
99     for (int i = 0; i < Rhs; i++)
100     {
101         if (array[i])
102         {
103             freeAllocatedSingleString(*(array[i]));
104         }
105     }
106     FREE(expTbxPath);
107     FREE(expTbxPrefFile);
108
109     LhsVar(1) = 0;
110     PutLhsVar();
111
112     return 0;
113 }
114 /*--------------------------------------------------------------------------*/