diff options
author | Bart Schaefer <schaefer@zsh.org> | 2022-06-11 15:02:46 -0700 |
---|---|---|
committer | Bart Schaefer <schaefer@zsh.org> | 2022-06-11 15:02:46 -0700 |
commit | 61f35bb6264b04fc24e09144a2515227d5531826 (patch) | |
tree | 876b50e22e0e427e138d5f50281a80eead49e8f3 /Src/Modules | |
parent | 6a6e358baf1b40924dfe47300acaf34e5549850c (diff) | |
download | zsh-61f35bb6264b04fc24e09144a2515227d5531826.tar.gz zsh-61f35bb6264b04fc24e09144a2515227d5531826.tar.xz zsh-61f35bb6264b04fc24e09144a2515227d5531826.zip |
50355: documentation and return status consistency in zsh/system module
Diffstat (limited to 'Src/Modules')
-rw-r--r-- | Src/Modules/system.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/Src/Modules/system.c b/Src/Modules/system.c index ea11ef037..929a8b002 100644 --- a/Src/Modules/system.c +++ b/Src/Modules/system.c @@ -74,6 +74,8 @@ bin_sysread(char *nam, char **args, Options ops, UNUSED(int func)) int infd = 0, outfd = -1, bufsize = SYSREAD_BUFSIZE, count; char *outvar = NULL, *countvar = NULL, *inbuf; + errno = 0; /* Distinguish non-system errors */ + /* -i: input file descriptor if not stdin */ if (OPT_ISSET(ops, 'i')) { infd = getposint(OPT_ARG(ops, 'i'), nam); @@ -238,6 +240,8 @@ bin_syswrite(char *nam, char **args, Options ops, UNUSED(int func)) int outfd = 1, len, count, totcount; char *countvar = NULL; + errno = 0; /* Distinguish non-system errors */ + /* -o: output file descriptor if not stdout */ if (OPT_ISSET(ops, 'o')) { outfd = getposint(OPT_ARG(ops, 'o'), nam); @@ -303,6 +307,13 @@ static struct { const char *name; int oflag; } openopts[] = { { "trunc", O_TRUNC } }; +/* + * Return values of bin_sysopen: + * 0 Success + * 1 Error in parameters to command + * 2 Error on open, ERRNO set by system + */ + /**/ static int bin_sysopen(char *nam, char **args, Options ops, UNUSED(int func)) @@ -319,6 +330,8 @@ bin_sysopen(char *nam, char **args, Options ops, UNUSED(int func)) int fdflags = 0; #endif + errno = 0; /* Distinguish non-system errors */ + if (!OPT_ISSET(ops, 'u')) { zwarnnam(nam, "file descriptor not specified"); return 1; @@ -374,12 +387,12 @@ bin_sysopen(char *nam, char **args, Options ops, UNUSED(int func)) if (fd == -1) { zwarnnam(nam, "can't open file %s: %e", *args, errno); - return 1; + return 2; } moved_fd = (explicit > -1) ? redup(fd, explicit) : movefd(fd); if (moved_fd == -1) { zwarnnam(nam, "can't open file %s", *args); - return 1; + return 2; } #ifdef FD_CLOEXEC @@ -423,6 +436,8 @@ bin_sysseek(char *nam, char **args, Options ops, UNUSED(int func)) char *whence; off_t pos; + errno = 0; /* Distinguish non-system errors */ + /* -u: file descriptor if not stdin */ if (OPT_ISSET(ops, 'u')) { fd = getposint(OPT_ARG(ops, 'u'), nam); |