a7625c49c573d6d79f0af16af95899a6ab319976
[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 "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,"Don''t find Windows temporary directory",_("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,_("Impossible to create : %s"),tmp_dir);
84                   MessageBox(NULL,MsgErr,_("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 /*--------------------------------------------------------------------------*/