X-Git-Url: https://git.distorted.org.uk/~mdw/mLib/blobdiff_plain/5d6d2d943f544564d404b04bd32b90d4ca557938..e8293f011ddae012752e35f0cc36e9a12665fbf2:/bres.c diff --git a/bres.c b/bres.c index 2a928e4..4efea3c 100644 --- a/bres.c +++ b/bres.c @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: bres.c,v 1.6 2001/06/22 19:33:38 mdw Exp $ + * $Id: bres.c,v 1.7 2004/04/08 01:36:11 mdw Exp $ * * Background reverse name resolution * * (c) 1999 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of the mLib utilities library. * @@ -15,46 +15,22 @@ * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * mLib is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with mLib; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: bres.c,v $ - * Revision 1.6 2001/06/22 19:33:38 mdw - * Hack if there is no @_SC_OPEN_MAX@ or @OPEN_MAX@. - * - * Revision 1.5 2001/02/03 16:21:08 mdw - * Bug fixes: restore signals to their default dispositions, and set up the - * addresses properly when unpacking @hostent@ structures. - * - * Revision 1.4 2000/08/15 17:35:02 mdw - * (gethost, and others): Since @gethost@ actually uses @malloc@ rather - * than @xmalloc@, it's wrong to use @xfree@ on the result. Fixed the code - * to use the right freeing function on the right data. - * - * Revision 1.3 2000/06/17 10:38:35 mdw - * Track changes to selbuf interface. - * - * Revision 1.2 1999/10/30 11:28:39 mdw - * Fix include error, pointed out by Chris Rutter. - * - * Revision 1.1 1999/10/04 21:40:42 mdw - * Added background resolver from `fw'. - * - */ - /*----- Header files ------------------------------------------------------*/ +#include "config.h" + #include #include #include @@ -73,6 +49,7 @@ #include "alloc.h" #include "bres.h" +#include "mdup.h" #include "report.h" #include "sel.h" @@ -253,7 +230,7 @@ static struct hostent *gethost(int fd) struct hostent *h; char *name; char **alias = 0; - + /* --- Read the skeleton structure --- */ if (doread(fd, &hsk, sizeof(hsk))) @@ -281,7 +258,7 @@ static struct hostent *gethost(int fd) if (hsk.nalias) { int i; if ((alias = malloc(hsk.nalias * sizeof(char *))) == 0) - goto tidy_1; + goto tidy_1; for (i = 0; i < hsk.nalias; i++) alias[i] = 0; for (i = 0; i < hsk.nalias; i++) { @@ -339,7 +316,7 @@ static struct hostent *gethost(int fd) } *p++ = 0; free(alias); - + #undef PUT } @@ -740,6 +717,7 @@ static int start(bres_server *rs) { int rfd[2], cfd[2]; pid_t kid; + mdup_fd md[2]; /* --- Make the pipes --- */ @@ -757,12 +735,10 @@ static int start(bres_server *rs) close(rfd[0]); if (server) { - dup2(cfd[0], STDIN_FILENO); - dup2(rfd[1], STDOUT_FILENO); - close(cfd[0]); - close(rfd[1]); - execlp(server, server, (char *)0); - child(STDOUT_FILENO, STDIN_FILENO); + md[0].cur = cfd[0]; md[0].want = STDIN_FILENO; + md[1].cur = rfd[1]; md[1].want = STDOUT_FILENO; + if (mdup(md, 2) || execlp(server, server, (char *)0)) + child(STDOUT_FILENO, STDIN_FILENO); } else child(rfd[1], cfd[0]); _exit(1);