Fix some valgrind issues
[scilab.git] / scilab / modules / fftw / sci_gateway / c / sci_loadfftwlibrary.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2006 - INRIA - Allan CORNET
4 * Copyright (C) 2012 - Scilab Enterprises - Cedric Delamarre
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 #include "api_scilab.h"
15 #include "callfftw.h"
16 #include "Scierror.h"
17 #include "fftwlibname.h"
18 #include "gw_fftw.h"
19 #include "localization.h"
20 /*--------------------------------------------------------------------------*/
21 int sci_loadfftwlibrary(char *fname, unsigned long fname_len)
22 {
23     static int l1, n1, m1;
24     char* FFTWLibname = NULL;
25     char* l1char = NULL;
26     int* piAddr1 = NULL;
27     SciErr sciErr;
28     int iErr = 0;
29
30     CheckInputArgument(pvApiCtx, 1, 1);
31
32     //get variable address
33     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1);
34     if (sciErr.iErr)
35     {
36         printError(&sciErr, 0);
37         return 1;
38     }
39
40     if (isStringType(pvApiCtx, piAddr1) == 0)
41     {
42         Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
43         return 1;
44     }
45
46     // Retrieve a single string at position 1
47     iErr = getAllocatedSingleString(pvApiCtx, piAddr1, &l1char);
48     if (iErr)
49     {
50         freeAllocatedSingleString(l1char);
51         return iErr;
52     }
53     FFTWLibname = l1char;
54     setfftwlibname(FFTWLibname);
55
56     n1 = 1;
57     if ( LoadFFTWLibrary(FFTWLibname) )
58     {
59         iErr = createScalarBoolean(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 1); // true
60     }
61     else
62     {
63         iErr = createScalarBoolean(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 0); // false
64     }
65     freeAllocatedSingleString(l1char);
66
67     if (iErr)
68     {
69         Scierror(999, _("%s: Memory allocation error.\n"), fname);
70         return iErr;
71     }
72
73     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
74     ReturnArguments(pvApiCtx);
75
76     return 0;
77 }
78 /*--------------------------------------------------------------------------*/