fix library path
[scilab.git] / scilab / modules / io / sci_gateway / cpp / sci_load.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
4 *
5 * This file must be used under the terms of the CeCILL.
6 * This source file is licensed as described in the file COPYING, which
7 * you should have received as part of this distribution.  The terms
8 * are also available at
9 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 *
11 */
12
13 #include <string.h>
14 #include "api_scilab.hxx"
15 #include "function.hxx"
16 #include "overload.hxx"
17 #include "execvisitor.hxx"
18 #include "io_gw.hxx"
19 #include "string.hxx"
20 #include "library.hxx"
21 #include "loadlib.hxx"
22
23 extern "C"
24 {
25 #include "sci_malloc.h"
26 #include "expandPathVariable.h"
27 #include "h5_fileManagement.h"
28 }
29
30 using namespace types;
31
32 /*--------------------------------------------------------------------------*/
33 Function::ReturnValue sci_load(types::typed_list &in, int _iRetCount, types::typed_list &out)
34 {
35     InternalType* pIT = in[0];
36
37     if (pIT->isString() == false)
38     {
39         Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), "load", 1);
40         return Function::Error;
41     }
42
43     String *pS = pIT->getAs<types::String>();
44
45     if (pS->isScalar() == false)
46     {
47         Scierror(999, _("%s: Wrong type for input argument #%d: Scalar string expected.\n"), "load", 1);
48         return Function::Error;
49     }
50
51     wchar_t* pwstPathLib = expandPathVariableW(pS->get(0));
52     char* pstPath = wide_string_to_UTF8(pwstPathLib);
53
54     if (isHDF5File(pstPath))
55     {
56         FREE(pstPath);
57         FREE(pwstPathLib);
58
59         //call overload
60         std::wstring wstFuncName = L"%_sodload";
61         ast::ExecVisitor* exec = new ast::ExecVisitor();
62         Callable::ReturnValue Ret = Callable::Error;
63         Ret = Overload::call(wstFuncName, in, _iRetCount, out, exec);
64         delete exec;
65         return Ret;
66     }
67     else
68     {
69         Library* lib = loadlib(pS->get(0));
70         FREE(pstPath);
71
72         if (lib == NULL)
73         {
74             Scierror(999, _("%s: Wrong file type \"%ls\".\n"), "load", pwstPathLib);
75             FREE(pwstPathLib);
76             return Function::Error;
77         }
78         FREE(pwstPathLib);
79     }
80
81     return Function::OK;
82 }
83
84
85 /*--------------------------------------------------------------------------*/