diff libinterp/corefcn/dirfns.cc @ 28087:9cb04a9e81ec

rmdir: throw an error if operation fails and nargout == 0 (bug #57830). * dirfns.cc (Frmdir): Change DEFMETHODX macro invocation to include nargout variable. Check nargout, and for cases where "nargout == 0" and "status" indicates failure, throw an error. For cases where "nargout > 0", return 3-value octave_value_list in variable "retval". * file-io.cc, gzip.cc, dir.m, isfolder.m, mkdir.m, run.m, tar.m, unpack.m, zip.m, pathdef.m, savepath.m, configure_make.m, install.m, uninstall.m, getpref.m, setpref.m, pkg.tst, publish.tst, system.tst: Change calls from "rmdir" to "sts = rmdir" so that an error is not unecessarily thrown in BIST tests and other clean up code.
author Rik <rik@octave.org>
date Mon, 17 Feb 2020 20:02:18 -0800
parents bd51beb6205e
children e8246b4a5459
line wrap: on
line diff
--- a/libinterp/corefcn/dirfns.cc	Mon Feb 17 20:02:10 2020 -0800
+++ b/libinterp/corefcn/dirfns.cc	Mon Feb 17 20:02:18 2020 -0800
@@ -224,7 +224,7 @@
     }
 }
 
-DEFMETHODX ("rmdir", Frmdir, interp, args, ,
+DEFMETHODX ("rmdir", Frmdir, interp, args, nargout,
             doc: /* -*- texinfo -*-
 @deftypefn  {} {} rmdir @var{dir}
 @deftypefnx {} {} rmdir (@var{dir}, "s")
@@ -250,6 +250,7 @@
   std::string dirname = args(0).xstring_value ("rmdir: DIR must be a string");
 
   std::string fulldir = octave::sys::file_ops::tilde_expand (dirname);
+  octave_value_list retval;
   int status = -1;
   std::string msg;
 
@@ -287,10 +288,20 @@
 
   evmgr.file_renamed (status >= 0);
 
-  if (status < 0)
-    return ovl (false, msg, "rmdir");
+  if (nargout == 0)
+    {
+      if (status < 0)
+        error ("rmdir: operation failed: %s", msg.c_str ());
+    }
   else
-    return ovl (true, "", "");
+    {
+      if (status < 0)
+        retval = ovl (false, msg, "rmdir");
+      else
+        retval = ovl (true, "", "");
+    }
+
+  return retval;
 }
 
 DEFUNX ("link", Flink, args, ,
@@ -567,8 +578,8 @@
 %!       save (filename{n}, "a");
 %!     endfor
 %!   else
-%!     rmdir (tmpdir);
-%!     error ("Couldn't change to temporary dir");
+%!     sts = rmdir (tmpdir);
+%!     error ("Couldn't change to temporary directory");
 %!   endif
 %! else
 %!   error ("Couldn't create temporary directory");
@@ -580,7 +591,7 @@
 %!   delete (filename{n});
 %! endfor
 %! cd (cwd);
-%! rmdir (tmpdir);
+%! sts = rmdir (tmpdir);
 %! assert (result1, {"file1"; "myfile1"});
 %! assert (result2, {"myfile1"});
 %! assert (result3, {"file1"; "file2"});