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