* Bugs 15937,15938 fixed: repaired TMPDIR + fullpath() under OSX 39/20739/5
Stéphane Mottelet [Fri, 25 Jan 2019 10:39:51 +0000 (11:39 +0100)]
http://bugzilla.scilab.org/show_bug.cgi?id=15937
http://bugzilla.scilab.org/show_bug.cgi?id=15938

Change-Id: I3587d67c362c5b95defd6b536aa8d3d2d9249351

scilab/modules/ast/src/cpp/system_env/sci_tmpdir.cpp
scilab/modules/fileio/src/c/fullpath.c
scilab/modules/fileio/tests/nonreg_tests/bug_15937.tst [new file with mode: 0644]
scilab/modules/fileio/tests/nonreg_tests/bug_15938.tst [new file with mode: 0644]

index 43027ec..8f342d4 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <errno.h>
 #include <stdlib.h>
+#include <limits.h>
 #include <time.h>
 #ifdef _MSC_VER
 #include <process.h>
@@ -245,8 +246,16 @@ char* computeTMPDIR()
         fprintf(stderr, _("Error: Could not create %s: %s\n"), env_dir, strerror(errno));
     }
 
+#if defined(__APPLE__)
+    // realpath should not complain as env_dir has been successfully created above
+    char *real_env_dir = realpath(env_dir, NULL);
+    FREE(env_dir);
+    setenvc("TMPDIR", real_env_dir);
+    return real_env_dir;
+#else
     setenvc("TMPDIR", env_dir);
-    return env_dir;
+    return env_dir;    
+#endif
 #endif
 }
 /*--------------------------------------------------------------------------*/
index fb72e13..c4ca66c 100644 (file)
@@ -108,18 +108,11 @@ char *get_full_path(char *_FullPath, const char *_Path, size_t _SizeInBytes)
         strtok(_Path_start, "/"); // _Path_start=/tmp  (1) or _Path_start="a" (2) or _Path_start="a/b/c" (3)
         strtok(_FullPath_start, "/"); // _FullPath_start=/tmp (1) or _FullPath_start=/home (2) and (3)
 
-#if defined(__APPLE__)
-        if (strcmp(_FullPath_start, "/private") == 0) // For case: fullpath(TMPDIR+"/a/b/c") (1)
-        {
-            normalizePath(_FullPath);
-        }
-#else
         if (strcmp(_Path_start, _FullPath_start) == 0) // For case: fullpath(TMPDIR+"/a/b/c") (1)
         {
             strcpy(_FullPath, pstWorkingPath);
             normalizePath(_FullPath);
         }
-#endif
         else if (strcmp(_Path, _FullPath) != 0) // For case: fullpath("a/b/c") (2) or fullpath("../a/b/c") (3)
         {
             strcpy(_Path_tmp, pstWorkingPath); //_Path_tmp="a/b/c" (2) or _Path_tmp="../a/b/c" (3)
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_15937.tst b/scilab/modules/fileio/tests/nonreg_tests/bug_15937.tst
new file mode 100644 (file)
index 0000000..d2b20b4
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - Stéphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+// <-- MACOSX ONLY -->//
+// <-- Non-regression test for bug 15937 -->
+//
+// <-- Bugzilla URL -->
+// https://bugzilla.scilab.org/show_bug.cgi?id=15937
+//
+// <-- Short Description -->
+// Unresolved TMPDIR makes mkdir fail on OSX
+// bug #15937 is occuring for two levels or more:
+
+path = fullfile(TMPDIR,"level1");
+mkdir(path)
+cd(path)
+
+path2 = fullfile(TMPDIR,"level2","level3");
+mkdir(path2)
+cd(path2)
\ No newline at end of file
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_15938.tst b/scilab/modules/fileio/tests/nonreg_tests/bug_15938.tst
new file mode 100644 (file)
index 0000000..d017058
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - Stéphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+// <-- MACOSX ONLY -->//
+// <-- Non-regression test for bug 15938 -->
+//
+// <-- Bugzilla URL -->
+// https://bugzilla.scilab.org/show_bug.cgi?id=15938
+//
+// <-- Short Description -->
+// fullpath() is broken on OSX
+
+cd(TMPDIR)
+path=fullfile("level1","level2")
+assert_checkequal(fullpath(path),fullfile(TMPDIR,"level1","level2"))
\ No newline at end of file