Merge remote-tracking branch 'origin/master' into windows
[scilab.git] / scilab / modules / hdf5 / sci_gateway / cpp / sci_hdf5_file_version.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
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 <hdf5.h>
17 #include "hdf5_gw.hxx"
18 #include "function.hxx"
19 #include "double.hxx"
20 #include "string.hxx"
21 #include "overload.hxx"
22
23 extern "C"
24 {
25 #include "sci_malloc.h"
26 #include "Scierror.h"
27 #include "expandPathVariable.h"
28 #include "h5_fileManagement.h"
29 #include "h5_attributeConstants.h"
30 #include "h5_readDataFromFile.h"
31 }
32
33 static const std::string fname("hdf5_file_version");
34
35 types::Function::ReturnValue sci_hdf5_file_version(types::typed_list &in, int _iRetCount, types::typed_list &out)
36 {
37     int rhs = static_cast<int>(in.size());
38     if (rhs < 1)
39     {
40         Scierror(999, _("%s: Wrong number of input argument(s): at least %d expected.\n"), fname.data(), 1);
41         return types::Function::Error;
42     }
43
44     if (in[0]->getId() != types::InternalType::IdScalarString)
45     {
46         Scierror(999, _("%s: Wrong size for input argument #%d: string expected.\n"), fname.data(), 1);
47         return types::Function::Error;
48     }
49
50     char* cfilename = expandPathVariable(in[0]->getAs<types::String>()->get()[0]);
51     std::string filename = cfilename;
52     FREE(cfilename);
53
54     int iFile = openHDF5File(filename.data(), 0);
55     if (iFile < 0)
56     {
57         Scierror(999, _("%s: Unable to open file: %s\n"), fname.data(), filename.data());
58         return types::Function::Error;
59     }
60
61     std::wstring wstFuncName;
62     //manage version information
63     int version = getSODFormatAttribute(iFile);
64     closeHDF5File(iFile);
65
66     if (version == -1)
67     {
68         version = 1;
69     }
70
71     out.push_back(new types::Double(static_cast<double>(version)));
72     return types::Function::OK;
73 }