api_scilab tests: fix memory errors
[scilab.git] / scilab / modules / api_scilab / tests / unit_tests / stringExample.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009-2010 - DIGITEO
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 "api_scilab.h"
17 #include "Scierror.h"
18 #include "localization.h"
19 #include "sciprint.h"
20
21 int stringExample(char *fname, void* pvApiCtx)
22 {
23     SciErr sciErr;
24     int* piAddr = NULL;
25     int iType   = 0;
26     int iRet    = 0;
27
28     CheckInputArgument(pvApiCtx, 1, 1);
29     CheckOutputArgument(pvApiCtx, 0, 1);
30
31     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
32     if (sciErr.iErr)
33     {
34         printError(&sciErr, 0);
35         return 0;
36     }
37
38     if (isStringType(pvApiCtx, piAddr))
39     {
40         if (isScalar(pvApiCtx, piAddr))
41         {
42             char* pstData = NULL;
43
44             iRet = getAllocatedSingleString(pvApiCtx, piAddr, &pstData);
45             if (iRet)
46             {
47                 return iRet;
48             }
49
50             iRet = createSingleString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, pstData);
51             if (iRet)
52             {
53                 freeAllocatedSingleString(pstData);
54                 return iRet;
55             }
56
57             freeAllocatedSingleString(pstData);
58         }
59         else
60         {
61             int iRows       = 0;
62             int iCols       = 0;
63             char** pstData  = NULL;
64
65             iRet = getAllocatedMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, &pstData);
66             if (iRet)
67             {
68                 return iRet;
69             }
70
71             sciErr = createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, iRows, iCols, pstData);
72             if (sciErr.iErr)
73             {
74                 freeAllocatedMatrixOfString(iRows, iCols, pstData);
75                 printError(&sciErr, 0);
76                 return sciErr.iErr;
77             }
78
79             freeAllocatedMatrixOfString(iRows, iCols, pstData);
80         }
81
82         AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
83     }
84     else
85     {
86         AssignOutputVariable(pvApiCtx, 1) = 0;
87     }
88     return 0;
89 }