Merge remote-tracking branch 'origin/6.1'
[scilab.git] / scilab / modules / jvm / sci_gateway / c / sci_javaclasspath.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) INRIA - Allan CORNET
4  * Copyright (C) DIGITEO - 2011 - Bruno JOFRET
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 /*--------------------------------------------------------------------------*/
18 #include "gw_jvm.h"
19 #include "sci_malloc.h"
20 #include "Scierror.h"
21 #include "addToClasspath.h"
22 #include "getClasspath.h"
23 #include "localization.h"
24 #include "freeArrayOfString.h"
25 #include "api_scilab.h"
26 /*--------------------------------------------------------------------------*/
27 int sci_javaclasspath(char *fname, void* pvApiCtx)
28 {
29     int *piAddressVarOne = NULL;
30     int iType = 0;
31     SciErr sciErr;
32
33     CheckRhs(0, 1);
34     CheckLhs(0, 1);
35
36     if (Rhs == 0)
37     {
38         int iRows = 0;
39         int iCols = 1;
40         char **pstClasspath = NULL;
41
42         pstClasspath = getClasspath(&iRows);
43         createMatrixOfString(pvApiCtx, Rhs + 1, iRows, iCols, pstClasspath);
44
45         LhsVar(1) = Rhs + 1;
46         PutLhsVar();
47         freeArrayOfString(pstClasspath, iRows * iCols);
48     }
49     else
50     {
51         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
52         if (sciErr.iErr)
53         {
54             printError(&sciErr, 0);
55             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
56             return 0;
57         }
58
59         sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
60         if (sciErr.iErr)
61         {
62             printError(&sciErr, 0);
63             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
64             return 0;
65         }
66
67         if ( iType == sci_strings )
68         {
69             char **pStVarOne = NULL;
70             static int iCols = 0, iRows = 0;
71             int i = 0;
72
73             if (getAllocatedMatrixOfString(pvApiCtx, piAddressVarOne, &iRows, &iCols, &pStVarOne))
74             {
75                 Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
76                 return 0;
77             }
78             for (i = 0; i < iRows * iCols ; i++)
79             {
80                 if (!addToClasspath(pStVarOne[i], STARTUP))
81                 {
82                     Scierror(999, _("%s: Could not add URL to system classloader : %s.\n"), fname, pStVarOne[i]);
83                     freeArrayOfString(pStVarOne, iRows * iCols);
84                     return 0;
85                 }
86             }
87             LhsVar(1) = 0;
88             PutLhsVar();
89             freeArrayOfString(pStVarOne, iRows * iCols);
90         }
91         else
92         {
93             Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1);
94         }
95     }
96
97     return 0;
98 }
99 /*--------------------------------------------------------------------------*/