bug 3797
[scilab.git] / scilab / modules / core / src / c / tmpdir.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) INRIA
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 #include <stdio.h>
13 #include <string.h>
14 #include "../../../fileio/includes/removedir.h"
15 #include "../../../fileio/includes/createdirectory.h"
16 #include <string.h>
17 #include "MALLOC.h" /* MALLOC */
18
19 #ifdef _MSC_VER
20 #include <windows.h>
21 #endif
22 #if defined(__STDC__) || defined(_MSC_VER)
23 #include <stdlib.h>
24 #ifndef _MSC_VER
25 #include <sys/types.h>
26 #include <unistd.h>
27 #endif
28 #else 
29 extern  char  *getenv();
30 #endif
31
32 #ifdef _MSC_VER
33 #define putenv(x) _putenv(x)
34 #endif
35
36 #ifdef _MSC_VER
37 #include <process.h>
38 #include "strdup_windows.h"
39 #endif
40 #include "PATH_MAX.h"
41 #include "prompt.h"
42 #include "tmpdir.h"
43 #include "localization.h"
44 /*--------------------------------------------------------------------------*/
45 static char tmp_dir[256],buf[256];
46 /*--------------------------------------------------------------------------*/
47 /**
48 * creates a tmp dir for a scilab session 
49 * and fixes the TMPDIR env variable
50 */
51 void C2F(settmpdir)(void)
52 {
53 #ifdef _MSC_VER
54         char TmpDirDefault[PATH_MAX];
55 #endif
56   static int first =0;
57   if ( first == 0 ) 
58     {
59       first++;
60 #ifdef _MSC_VER 
61           if (!GetTempPath(PATH_MAX,TmpDirDefault))
62           {
63                   MessageBox(NULL,gettext("Cannot find Windows temporary directory."),gettext("Error"),MB_ICONERROR);
64                   exit(1);
65           }
66           else
67           {
68                   sprintf(tmp_dir,"%sSCI_TMP_%d_",TmpDirDefault,(int) _getpid());
69           }
70
71           if ( CreateDirectory(tmp_dir,NULL)==FALSE)
72       {
73                 DWORD attribs=GetFileAttributes (tmp_dir); 
74
75                 if (attribs & FILE_ATTRIBUTE_DIRECTORY)
76                 {
77                   /* Repertoire existant */
78                 }
79                 else
80                 {
81                   #ifdef _DEBUG
82                   char MsgErr[1024];
83                   wsprintf(MsgErr,gettext("Impossible to create : %s"),tmp_dir);
84                   MessageBox(NULL,MsgErr,gettext("Error"),MB_ICONERROR);
85                   exit(1);
86                   #else
87                   GetTempPath(PATH_MAX,TmpDirDefault);
88                   strcpy(tmp_dir,TmpDirDefault);
89                   tmp_dir[strlen(tmp_dir)-1]='\0'; /* Remove last \ */
90                   #endif
91                 }
92   }
93 #else 
94   sprintf(tmp_dir,"/tmp/SD_%d_",(int) getpid());
95   createdirectory(tmp_dir) ;
96 #endif 
97   sprintf(buf,"TMPDIR=%s",tmp_dir);
98   putenv(buf);
99     }
100 }
101 /*--------------------------------------------------------------------------*/
102 /**
103 * get a reference to tmp_dir 
104 * @return the name of the directory
105 */
106 char *get_sci_tmp_dir(void)
107 {
108   /* just in case */
109   C2F(settmpdir)();
110   return tmp_dir;
111 }
112 /*--------------------------------------------------------------------------*/
113 /**
114 * remove TMPDIR directory
115 */
116 void C2F(tmpdirc)(void)
117 {
118   char *tmp_dir2 = get_sci_tmp_dir(); 
119   removedir(tmp_dir2);
120 }
121 /*--------------------------------------------------------------------------*/
122 char *getTMPDIR(void)
123 {
124         return strdup(tmp_dir);
125 }
126 /*--------------------------------------------------------------------------*/