tclsci plugged
[scilab.git] / scilab / modules / io / src / c / setenvc.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2005 - INRIA - 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.1-en.txt
10 *
11 */
12
13 #ifdef _MSC_VER
14 #include <windows.h>
15 #endif
16 #include <stdlib.h>
17 #include <stdio.h>
18 #include <string.h>
19 #include "setenvc.h"
20 #include "sci_malloc.h" /* MALLOC */
21 #include "charEncoding.h"
22 #include "os_string.h"
23 #include "setenvtcl.h"
24
25 /*--------------------------------------------------------------------------*/
26 BOOL setenvc(const char *stringIn, const char *valueIn)
27 {
28 #ifdef _MSC_VER
29     wchar_t* wstringIn = to_wide_string(stringIn);
30     wchar_t* wvalueIn = to_wide_string(valueIn);
31
32     if (setenvcW(wstringIn, wvalueIn) == 0)
33     {
34         FREE(wstringIn);
35         FREE(wvalueIn);
36         return FALSE;
37     }
38
39     FREE(wstringIn);
40     FREE(wvalueIn);
41 #else
42     /* linux and Mac OS X */
43     /* setenv() function is strongly preferred to putenv() */
44     /* http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/setenv.3.html */
45
46 #ifndef _MAX_ENV
47 #define _MAX_ENV 32767
48 #endif
49
50     int len_env = (int)(strlen(stringIn) + strlen(valueIn) + 1);
51     if (len_env < _MAX_ENV)
52     {
53         if ( setenv(stringIn, valueIn, 1) )
54         {
55             return FALSE;
56         }
57     }
58     else
59     {
60         return FALSE;
61     }
62
63     setenvtcl(stringIn, valueIn);
64 #endif
65
66     return TRUE;
67 }
68 /*--------------------------------------------------------------------------*/
69 BOOL setenvcW(const wchar_t *wstringIn, const wchar_t *wvalueIn)
70 {
71     BOOL ret = TRUE;
72     int len_env = 0;
73 #ifdef _MSC_VER
74     if (SetEnvironmentVariableW(wstringIn, wvalueIn) == 0)
75     {
76         return FALSE;
77     }
78
79     char * stringIn = wide_string_to_UTF8(wstringIn);
80     char * valueIn = wide_string_to_UTF8(wvalueIn);
81     setenvtcl(stringIn, valueIn);
82     FREE(stringIn);
83     FREE(valueIn);
84 #else
85     char * stringIn = wide_string_to_UTF8(wstringIn);
86     char * valueIn = wide_string_to_UTF8(wvalueIn);
87     ret = setenvc(stringIn, valueIn);
88     FREE(stringIn);
89     FREE(valueIn);
90 #endif
91
92     return ret;
93 }
94 /*--------------------------------------------------------------------------*/