Mercurial > octave
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"});