From 2f8aaaf5e425f2285e028e35a52d0766067ab3fd Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Tue, 22 Sep 2009 16:04:13 +0000 Subject: 27286: Made movefd() return the targetfd on success. Added a little more error checking in the callers of movefd(). --- ChangeLog | 8 +++++++- Src/Modules/socket.c | 19 +++++++++++-------- Src/Modules/tcp.c | 19 +++++++++++-------- Src/utils.c | 4 ++-- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 944a5ab86..6c9dc6211 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-09-22 Wayne Davison + + * 27286: Src/Modules/socket.c Src/Modules/tcp.c Src/utils.c: + Made movefd() return the targetfd on success. Added a little + more error checking in the callers of movefd(). + 2009-09-22 Peter Stephenson * 27284: Src/exec.c, Src/parse.c, Src/utils.c, @@ -12209,5 +12215,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.4786 $ +* $Revision: 1.4787 $ ***************************************************** diff --git a/Src/Modules/socket.c b/Src/Modules/socket.c index 3f47636bc..ad7eb5884 100644 --- a/Src/Modules/socket.c +++ b/Src/Modules/socket.c @@ -120,10 +120,7 @@ bin_zsocket(char *nam, char **args, Options ops, UNUSED(int func)) } if (targetfd) { - if (redup(sfd, targetfd) == -1) - sfd = -1; - else - sfd = targetfd; + sfd = redup(sfd, targetfd); } else { /* move the fd since no one will want to read from it */ @@ -205,8 +202,11 @@ bin_zsocket(char *nam, char **args, Options ops, UNUSED(int func)) } if (targetfd) { - redup(rfd, targetfd); - sfd = targetfd; + sfd = redup(rfd, targetfd); + if (sfd < 0) { + zerrnam(nam, "could not duplicate socket fd to %d: %e", targetfd, errno); + return 1; + } } else { sfd = rfd; @@ -242,8 +242,11 @@ bin_zsocket(char *nam, char **args, Options ops, UNUSED(int func)) else { if (targetfd) { - redup(sfd, targetfd); - sfd = targetfd; + sfd = redup(sfd, targetfd); + if (sfd < 0) { + zerrnam(nam, "could not duplicate socket fd to %d: %e", targetfd, errno); + return 1; + } } setiparam("REPLY", sfd); diff --git a/Src/Modules/tcp.c b/Src/Modules/tcp.c index 2825cb978..3f92050ae 100644 --- a/Src/Modules/tcp.c +++ b/Src/Modules/tcp.c @@ -446,10 +446,7 @@ bin_ztcp(char *nam, char **args, Options ops, UNUSED(int func)) } if (targetfd) { - if (redup(sess->fd,targetfd) == -1) - sess->fd = -1; - else - sess->fd = targetfd; + sess->fd = redup(sess->fd, targetfd); } else { /* move the fd since no one will want to read from it */ @@ -547,8 +544,11 @@ bin_ztcp(char *nam, char **args, Options ops, UNUSED(int func)) } if (targetfd) { - redup(rfd, targetfd); - sess->fd = targetfd; + sess->fd = redup(rfd, targetfd); + if (sess->fd < 0) { + zerrnam(nam, "could not duplicate socket fd to %d: %e", targetfd, errno); + return 1; + } } else { sess->fd = rfd; @@ -662,8 +662,11 @@ bin_ztcp(char *nam, char **args, Options ops, UNUSED(int func)) else { if (targetfd) { - redup(sess->fd, targetfd); - sess->fd = targetfd; + sess->fd = redup(sess->fd, targetfd); + if (sess->fd < 0) { + zerrnam(nam, "could not duplicate socket fd to %d: %e", targetfd, errno); + return 1; + } } setiparam("REPLY", sess->fd); diff --git a/Src/utils.c b/Src/utils.c index 21a7b43f6..b807eea08 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -1654,14 +1654,14 @@ movefd(int fd) /* * Move fd x to y. If x == -1, fd y is closed. - * Return 0 for success, -1 for failure. + * Returns y for success, -1 for failure. */ /**/ mod_export int redup(int x, int y) { - int ret = 0; + int ret = y; if(x < 0) zclose(y); -- cgit 1.4.1