tempname function added (it will be used to fix bug 9614)
[scilab.git] / scilab / modules / fileio / sci_gateway / c / sci_tempname.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - DIGITEO - Allan CORNET
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.h"
15 #include "stack-c.h"
16 #include "createtempfilename.h"
17 #include "gw_fileio.h"
18 #include "Scierror.h"
19 #include "localization.h"
20 /*--------------------------------------------------------------------------*/
21 #define DEFAULT_PREFIX L"SCI"
22 /*--------------------------------------------------------------------------*/
23 int sci_tempname(char *fname,unsigned long fname_len)
24 {
25     SciErr sciErr;
26     wchar_t *wcprefix = NULL;
27     wchar_t *wcTempFilename = NULL;
28
29     Rhs = Max(Rhs, 0);
30     CheckRhs(0, 1);
31     CheckLhs(1, 1);
32
33     if (Rhs == 0)
34     {
35         wcprefix = (wchar_t *)MALLOC(sizeof(wchar_t) * (wcslen(DEFAULT_PREFIX) + 1));
36         wcscpy(wcprefix, DEFAULT_PREFIX);
37     }
38
39     if (Rhs == 1)
40     {
41         int *piAddressVarOne = NULL;
42         int m1 = 0, n1 = 0;
43
44         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
45         if(sciErr.iErr)
46         {
47             printError(&sciErr, 0);
48             return 0;
49         }
50
51         if (!isScalar(pvApiCtx, piAddressVarOne))
52         {
53             Scierror(999,_("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 1);
54             return 0;
55         }
56
57         if (isStringType(pvApiCtx,piAddressVarOne))
58         {
59             if (getAllocatedSingleWideString(pvApiCtx, piAddressVarOne, &wcprefix) != 0)
60             {
61                 Scierror(999,_("%s: Memory allocation error.\n"), fname);
62                 return 0;
63             }
64
65 #if _MSC_VER
66             if (wcslen(wcprefix) > 3)
67             {
68                 FREE(wcprefix);
69                 wcprefix = NULL;
70
71                 Scierror(999,_("%s: Wrong size for input argument #%d: A string (3 characters max.) expected.\n"), fname, 1);
72                 return 0;
73             }
74 #endif
75         }
76         else
77         {
78             FREE(wcprefix);
79             wcprefix = NULL;
80
81             Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
82             return 0;
83         }
84     }
85
86     wcTempFilename = createtempfilenameW(wcprefix, TRUE);
87
88     FREE(wcprefix);
89     wcprefix = NULL;
90
91     if (wcTempFilename)
92     {
93         if (createSingleWideString(pvApiCtx, Rhs + 1, wcTempFilename) == 0)
94         {
95             FREE(wcTempFilename);
96             wcTempFilename = NULL;
97
98             LhsVar(1) = Rhs + 1;
99             PutLhsVar();
100             return 0;
101         }
102     }
103
104     FREE(wcTempFilename);
105     wcTempFilename = NULL;
106     Scierror(999,_("%s: Memory allocation error.\n"), fname);
107     return 0;
108 }
109 /*--------------------------------------------------------------------------*/