Mercurial > octave
changeset 28100:aa4eba65d227
mkfifo: throw error if operation fails and nargout == 0 (bug #57830).
* syscalls.cc (Fmkfifo): Add nargout to DEFUN macro invocation.
Rename "err" to "status" in documentation.
Document that status variable is -1 if an error is encountered.
Based on nargout variable, either throw an error if operation failed, or return
status and msg information.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 18 Feb 2020 16:10:45 -0800 |
parents | ce660f584f00 |
children | 43c2d9c03cc7 |
files | libinterp/corefcn/syscalls.cc |
diffstat | 1 files changed, 20 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/syscalls.cc Tue Feb 18 16:06:40 2020 -0800 +++ b/libinterp/corefcn/syscalls.cc Tue Feb 18 16:10:45 2020 -0800 @@ -676,17 +676,17 @@ return retval; } -DEFUNX ("mkfifo", Fmkfifo, args, , +DEFUNX ("mkfifo", Fmkfifo, args, nargout, doc: /* -*- texinfo -*- -@deftypefn {} {@var{err} =} mkfifo (@var{name}, @var{mode}) -@deftypefnx {} {[@var{err}, @var{msg}] =} mkfifo (@var{name}, @var{mode}) +@deftypefn {} {} mkfifo (@var{name}, @var{mode}) +@deftypefnx {} {[@var{status}, @var{msg}] =} mkfifo (@var{name}, @var{mode}) Create a FIFO special file named @var{name} with file mode @var{mode}. @var{mode} is interpreted as an octal number and is subject to umask processing. The final calculated mode is @code{@var{mode} - @var{umask}}. -If successful, @var{err} is 0 and @var{msg} is an empty string. -Otherwise, @var{err} is nonzero and @var{msg} contains a system-dependent +If successful, @var{status} is 0 and @var{msg} is an empty string. +Otherwise, @var{status} is -1 and @var{msg} contains a system-dependent error message. @seealso{pipe, umask} @end deftypefn */) @@ -703,11 +703,25 @@ int mode = convert (octal_mode, 8, 10); + octave_value_list retval; std::string msg; int status = octave::sys::mkfifo (name, mode, msg); - return ovl (status, msg); + if (nargout == 0) + { + if (status < 0) + error ("mkfifo: operation failed: %s", msg.c_str ()); + } + else + { + if (status < 0) + retval = ovl (-1.0, msg); + else + retval = ovl (0.0, ""); + } + + return retval; } /*