From 92c45debc112b2de814c507f0e1721c472a0c5fe Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Mon, 18 Oct 1999 15:27:37 +0000 Subject: REVERT. It breaks things. --- src/process.c | 74 ++++++++++++++++++++--------------------------------------- 1 file changed, 25 insertions(+), 49 deletions(-) diff --git a/src/process.c b/src/process.c index 47518b60..acdb5a35 100644 --- a/src/process.c +++ b/src/process.c @@ -22,48 +22,32 @@ extern regex_t **regList; int forkCommand(char **args, int *outfd, int *errfd, int *cmdfd, int quiet) { /* Fork command 'cmd', returning pid, and optionally pointer * to open file descriptor fd */ - int fdout, fderr, fdcmd, pid; + int fdin, fdout, fderr, fdcmd, pid; int outpipe[2], errpipe[2], fdpipe[2]; int ourpid; + if ( (pipe(outpipe)==-1) || (pipe(errpipe)==-1) || (pipe(fdpipe)==-1) ) { + perror("pipe"); + return -1; + } + if (outfd) { - if (pipe(outpipe)==-1) { - perror("pipe"); - return -1; - } fdout = outpipe[1]; *outfd = outpipe[0]; } else { - if (!quiet) - if ((fdout=dup(1))==-1) { - perror("dup"); - return -1; - } + if (!quiet) + fdout=dup(1); } if (errfd) { - if (pipe(errpipe)==-1) { - perror("pipe"); - return -1; - } fderr = errpipe[1]; *errfd = errpipe[0]; } else { if (!quiet) - if ((fderr=dup(2))==-1) { - perror("dup"); - return -1; - } - } - if (cmdfd) { - if (pipe(fdpipe)==-1) { - perror("pipe"); - return -1; - } - fdcmd = fdpipe[1]; - *cmdfd = fdpipe[0]; - } else { - fdcmd = open("/dev/null",O_WRONLY); + fderr=dup(2); } + fdcmd = fdpipe[1]; + if (cmdfd) + *cmdfd = fdpipe[0]; ourpid = getpid(); if ((pid = fork())==-1) { perror("fork"); @@ -74,6 +58,7 @@ int forkCommand(char **args, int *outfd, int *errfd, int *cmdfd, int quiet) { * fucks up and we segfault or something, we don't kill rc.sysinit. */ if ( (cmdfd&&!pid) || (pid &&!cmdfd)) { /* parent */ + close(fdin); close(fdout); close(fderr); close(fdcmd); @@ -127,7 +112,7 @@ int forkCommand(char **args, int *outfd, int *errfd, int *cmdfd, int quiet) { int monitor(char *cmdname, int pid, int numfds, int *fds, int reexec, int quiet, int debug) { struct pollfd *pfds; - char *buf; + char *buf=malloc(8192*sizeof(char)); char *outbuf=NULL; char *tmpstr=NULL; int x,y,rc=-1; @@ -136,18 +121,14 @@ int monitor(char *cmdname, int pid, int numfds, int *fds, int reexec, int quiet, char **cmdargs=NULL; char **tmpargs=NULL; int cmdargc; - char procpath[20]; + char *procpath; if (reexec) { + procpath=malloc(20*sizeof(char)); snprintf(procpath,20,"/proc/%d",pid); } - - buf=malloc(8192*sizeof(char)); + pfds = malloc(numfds*sizeof(struct pollfd)); - if (!buf || !pfds) { - perror("malloc"); - exit(errno); - } for (x=0;x