Resolve symbolic links in TMPDIR, seems to fix many tests under Mac OS X 92/9292/3
Vincent COUVERT [Wed, 26 Sep 2012 21:12:01 +0000 (23:12 +0200)]
Change-Id: I4145e194396983d2f76d32a0b360cadeb0345e3e

scilab/modules/core/src/c/tmpdir.c

index acb5a2a..9f22943 100644 (file)
@@ -25,7 +25,7 @@
 #include <sys/types.h>
 #include <unistd.h>
 #endif
-#else 
+#else
 extern  char  *getenv();
 #endif
 
@@ -44,25 +44,25 @@ extern  char  *getenv();
 #include "removedir.h"
 #include "createdirectory.h"
 /*--------------------------------------------------------------------------*/
-static char tmp_dir[PATH_MAX+FILENAME_MAX+1];
+static char tmp_dir[PATH_MAX + FILENAME_MAX + 1];
 static int alreadyCreated = 0;
 /*--------------------------------------------------------------------------*/
 #ifdef _MSC_VER
 void createScilabTMPDIR(void)
 {
     wchar_t wcTmpDirDefault[PATH_MAX];
-    if (!GetTempPathW(PATH_MAX,wcTmpDirDefault))
+    if (!GetTempPathW(PATH_MAX, wcTmpDirDefault))
     {
-        MessageBox(NULL,_("Cannot find Windows temporary directory (1)."),_("Error"),MB_ICONERROR);
+        MessageBox(NULL, _("Cannot find Windows temporary directory (1)."), _("Error"), MB_ICONERROR);
         exit(1);
     }
     else
     {
-        wchar_t wctmp_dir[PATH_MAX+FILENAME_MAX+1];
+        wchar_t wctmp_dir[PATH_MAX + FILENAME_MAX + 1];
         static wchar_t bufenv[PATH_MAX + 16];
         char *TmpDir = NULL;
-        swprintf(wctmp_dir,PATH_MAX+FILENAME_MAX+1,L"%sSCI_TMP_%d_",wcTmpDirDefault,(int) _getpid());
-        if ( CreateDirectoryW(wctmp_dir,NULL) == FALSE)
+        swprintf(wctmp_dir, PATH_MAX + FILENAME_MAX + 1, L"%sSCI_TMP_%d_", wcTmpDirDefault, (int) _getpid());
+        if ( CreateDirectoryW(wctmp_dir, NULL) == FALSE)
         {
             DWORD attribs = GetFileAttributesW (wctmp_dir);
             if (attribs & FILE_ATTRIBUTE_DIRECTORY)
@@ -71,24 +71,24 @@ void createScilabTMPDIR(void)
             }
             else
             {
-                #ifdef _DEBUG
+#ifdef _DEBUG
                 {
                     char MsgErr[1024];
-                    wsprintf(MsgErr,_("Impossible to create : %s"),tmp_dir);
-                    MessageBox(NULL,MsgErr,_("Error"),MB_ICONERROR);
+                    wsprintf(MsgErr, _("Impossible to create : %s"), tmp_dir);
+                    MessageBox(NULL, MsgErr, _("Error"), MB_ICONERROR);
                     exit(1);
                 }
-                #else
+#else
                 {
-                    GetTempPathW(PATH_MAX,wcTmpDirDefault);
-                    wcscpy(wctmp_dir,wcTmpDirDefault);
-                    wctmp_dir[wcslen(wctmp_dir)-1]='\0'; /* Remove last \ */
+                    GetTempPathW(PATH_MAX, wcTmpDirDefault);
+                    wcscpy(wctmp_dir, wcTmpDirDefault);
+                    wctmp_dir[wcslen(wctmp_dir) - 1] = '\0'; /* Remove last \ */
                 }
-                #endif
+#endif
             }
         }
 
-        swprintf(bufenv,PATH_MAX + 16,L"TMPDIR=%s",wctmp_dir);
+        swprintf(bufenv, PATH_MAX + 16, L"TMPDIR=%s", wctmp_dir);
         _wputenv(bufenv);
 
         TmpDir = wide_string_to_UTF8(wctmp_dir);
@@ -115,7 +115,7 @@ void createScilabTMPDIR(void)
         alreadyCreated++;
         /* If the env variable TMPDIR is set, honor this preference */
         if ((tmpdir = getenv("TMPDIR")) != NULL &&
-            strlen(tmpdir) < (PATH_MAX) && strstr(tmpdir, "SCI_TMP_") == NULL)
+                strlen(tmpdir) < (PATH_MAX) && strstr(tmpdir, "SCI_TMP_") == NULL)
         {
             /* TMPDIR does not contains SCI_TMP. Using TMPDIR */
             strcpy(tmp_dir, tmpdir);
@@ -130,13 +130,13 @@ void createScilabTMPDIR(void)
         }
 
         /* XXXXXX will be randomized by mkdtemp */
-        char *tmp_dir_strdup = strdup(tmp_dir); /* Copy to avoid to have the same buffer as input and output for sprintf */
+        char *tmp_dir_strdup = realpath(tmp_dir, NULL); /* Copy to avoid to have the same buffer as input and output for sprintf */
         sprintf(tmp_dir, "%s/SCI_TMP_%d_XXXXXX", tmp_dir_strdup, (int) getpid());
         free(tmp_dir_strdup);
 
-        if(mkdtemp(tmp_dir) == NULL)
+        if (mkdtemp(tmp_dir) == NULL)
         {
-                fprintf(stderr,_("Error: Could not create %s: %s\n"), tmp_dir, strerror(errno));
+            fprintf(stderr, _("Error: Could not create %s: %s\n"), tmp_dir, strerror(errno));
         }
 
         sprintf(bufenv, "TMPDIR=%s", tmp_dir);