* Bug 14395 fixed: %dir_p repaired against []+'..' when no subdir 09/18309/4
Samuel GOUGEON [Sun, 26 Jun 2016 00:43:57 +0000 (02:43 +0200)]
  http://bugzilla.scilab.org/14395

Change-Id: Ie2cb64823dbce33833dec2cfb2a20f3a8ab426d4

scilab/CHANGES.md
scilab/modules/fileio/macros/%dir_p.sci
scilab/modules/fileio/tests/nonreg_tests/bug_14395.dia.ref [new file with mode: 0644]
scilab/modules/fileio/tests/nonreg_tests/bug_14395.tst [new file with mode: 0644]

index 1c6fc22..01bf02f 100644 (file)
@@ -332,6 +332,7 @@ Bug Fixes
 * [#13990](http://bugzilla.scilab.org/show_bug.cgi?id=13990): `warning` with localization enabled some memory corruption
 * [#14192](http://bugzilla.scilab.org/show_bug.cgi?id=14192): `g_margin` error-ed for double integrator.
 * [#14367](http://bugzilla.scilab.org/show_bug.cgi?id=14367): `edit_curv` failed opening due to a `[]+1` operation.
+* [#14395](http://bugzilla.scilab.org/show_bug.cgi?id=14395): `dir` displayed a []+".." warning when no subdirectory exists.
 * [#14448](http://bugzilla.scilab.org/show_bug.cgi?id=14448): removed havewindow() was still documented
 * [#14513](http://bugzilla.scilab.org/show_bug.cgi?id=14513): `isqual` comparing two built-in functions yielded an error.
 * [#14527](http://bugzilla.scilab.org/show_bug.cgi?id=14527): Calling pathconvert function without parameters crashed Scilab.
index 562dfe9..ce1362d 100644 (file)
@@ -22,7 +22,9 @@ function %dir_p(L)
 
     // If it is a directory, add a trailing "/"
     tmp = find(L.isdir);
-    name(tmp) = name(tmp) + filesep();
+    if tmp~=[] then
+        name(tmp) = name(tmp) + filesep();
+    end
 
     nc = 6;
     l1 = length(name);
@@ -51,4 +53,3 @@ function %dir_p(L)
     txt(txt == "") = [];
     mprintf("%s \n",txt);
 endfunction
-
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_14395.dia.ref b/scilab/modules/fileio/tests/nonreg_tests/bug_14395.dia.ref
new file mode 100644 (file)
index 0000000..0bbb303
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Pierre-Aimé AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 14395 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14395
+//
+// <-- Short Description -->
+//    %dir_p on a directory with no subdir yielded a warning operation +
+is_created = createdir("TMPDIR/test_dir");
+if ( is_created ) then
+    fd = mopen("TMPDIR/test_dir/testfile.txt", "w");
+    mputl("this is a test", fd);
+end
+warning_mode = warning("query");
+warning("stop");
+ierr = 0;
+try
+    res = dir("TMPDIR/test_dir"); // no sub_dir
+    disp(res);
+catch
+    ierr = 1;
+end
+testfile.txt 
+assert_checkequal(ierr, 0);
+warning(warning_mode);
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_14395.tst b/scilab/modules/fileio/tests/nonreg_tests/bug_14395.tst
new file mode 100644 (file)
index 0000000..d5d9b1d
--- /dev/null
@@ -0,0 +1,33 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Pierre-Aimé AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 14395 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14395
+//
+// <-- Short Description -->
+//    %dir_p on a directory with no subdir yielded a warning operation +
+
+is_created = createdir("TMPDIR/test_dir");
+if ( is_created ) then
+    fd = mopen("TMPDIR/test_dir/testfile.txt", "w");
+    mputl("this is a test", fd);
+end
+
+warning_mode = warning("query");
+warning("stop");
+ierr = 0;
+try
+    res = dir("TMPDIR/test_dir"); // no sub_dir
+    disp(res);
+catch
+    ierr = 1;
+end
+assert_checkequal(ierr, 0);
+warning(warning_mode);
+