external_objects_java: fix crash on ScilabJavaEnvironment when used as a local variable
[scilab.git] / scilab / modules / external_objects_java / sci_gateway / cpp / sci_jallowClassReloading.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  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 extern "C" {
15 #include "Scierror.h"
16 #include "gw_external_objects_java.h"
17 }
18
19 #include "ScilabJavaEnvironment.hxx"
20 #include "ScilabGateway.hxx"
21
22 using namespace org_scilab_modules_external_objects_java;
23 using namespace org_modules_external_objects;
24
25 int sci_jallowClassReloading(char * fname, unsigned long fname_len)
26 {
27     try
28     {
29         const int envId = ScilabJavaEnvironment::start();
30
31         ScilabJavaEnvironment *javaEnvironment = ScilabJavaEnvironment::getInstance();
32         if (!javaEnvironment)
33         {
34             Scierror(999, "%s: No Java environment available (instance is null).", fname);
35             return 0;
36         }
37
38         JavaOptionsSetter setter = javaEnvironment->getOptionsHelper().getSetter(JavaOptionsSetter::ALLOWRELOAD);
39         return ScilabGateway::getsetOptions(fname, envId, setter, pvApiCtx);
40     }
41     catch (std::exception & e)
42     {
43         Scierror(999, "%s: An error occured: %s", fname, e.what());
44         return 0;
45     }
46
47     return 0;
48 }