JobDoOutput(job, FALSE);
JobDoOutput(job, false);
Job_CatchOutput(){    int 		  nfds;    struct timeval	  timeout;    LstNode		  ln;    Job 		  *job;#ifdef RMT_WILL_WATCH    int 		  pnJobs;	/* Previous nJobs */#endif    (void)fflush(stdout);#ifdef RMT_WILL_WATCH    pnJobs = nJobs;    /*     * It is possible for us to be called with nJobs equal to 0. This happens     * if all the jobs finish and a job that is stopped cannot be run     * locally (eg if maxLocal is 0) and cannot be exported. The job will     * be placed back on the stoppedJobs queue, Job_Empty() will return false,     * Make_Run will call us again when there's nothing for which to wait.     * nJobs never changes, so we loop forever. Hence the check. It could     * be argued that we should sleep for a bit so as not to swamp the     * exportation system with requests. Perhaps we should.     *     * NOTE: IT IS THE RESPONSIBILITY OF Rmt_Wait TO CALL Job_CatchChildren     * IN A TIMELY FASHION TO CATCH ANY LOCALLY RUNNING JOBS THAT EXIT.     * It may use the variable nLocal to determine if it needs to call     * Job_CatchChildren (if nLocal is 0, there's nothing for which to     * wait...)     */    while (nJobs != 0 && pnJobs == nJobs) {	Rmt_Wait();    }#else    if (usePipes) {	int count = howmany(outputsn+1, NFDBITS) * sizeof(fd_mask);	fd_set *readfdsp = malloc(count);	if (readfdsp == NULL)	    return;	memcpy(readfdsp, outputsp, count);	timeout.tv_sec = SEL_SEC;	timeout.tv_usec = SEL_USEC;	if ((nfds = select(outputsn+1, readfdsp, (fd_set *) 0,			   (fd_set *) 0, &timeout)) <= 0) {	    free(readfdsp);	    return;	} else {	    for (ln = Lst_First(&jobs); nfds && ln != NULL; ln = Lst_Adv(ln)) {		job = (Job *)Lst_Datum(ln);		if (FD_ISSET(job->inPipe, readfdsp)) {		    JobDoOutput(job, FALSE);		    nfds -= 1;		}	    }	}	free(readfdsp);    }#endif /* RMT_WILL_WATCH */}