/* $OpenPackages$ */
-/* $OpenBSD: job.c,v 1.118 2009/08/16 09:50:13 espie Exp $ */
+/* $OpenBSD: job.c,v 1.119 2010/07/15 10:37:32 espie Exp $ */
/* $NetBSD: job.c,v 1.16 1996/11/06 17:59:08 christos Exp $ */
/*
char buffer[JOB_BUFSIZE];
size_t pos;
};
-
+
typedef struct Job_ {
pid_t pid; /* The child's process ID */
GNode *node; /* The target the child is making */
/* data structure linked to job handling through select */
static fd_set *output_mask = NULL; /* File descriptors to look for */
-
+
static fd_set *actual_mask = NULL; /* actual select argument */
static int largest_fd = -1;
static size_t mask_size = 0;
static void handle_all_jobs_output(void);
-/* handle_job_output(job, n, finish):
+/* handle_job_output(job, n, finish):
* n = 0 or 1 (stdout/stderr), set finish to retrieve everything.
*/
static void handle_job_output(Job *, int, bool);
static void print_partial_buffer(struct job_pipe *, Job *, FILE *, size_t);
-static void print_partial_buffer_and_shift(struct job_pipe *, Job *, FILE *,
+static void print_partial_buffer_and_shift(struct job_pipe *, Job *, FILE *,
size_t);
static bool print_complete_lines(struct job_pipe *, Job *, FILE *, size_t);
if (p->n->lineno)
Error(" %s %d (%s, line %lu of %s)",
type, p->code, p->n->name, p->n->lineno, p->n->fname);
- else
+ else
Error(" %s %d (%s)", type, p->code, p->n->name);
}
}
banner(Job *job, FILE *out)
{
if (job->node != lastNode) {
- if (DEBUG(JOBBANNER))
+ if (DEBUG(JOBBANNER))
(void)fprintf(out, "--- %s ---\n", job->node->name);
lastNode = job->node;
}
va_end(va);
}
}
-
+
static void
close_job_pipes(Job *job)
{
*-----------------------------------------------------------------------
* process_job_status --
* Do processing for the given job including updating
- * parents and starting new jobs as available/necessary.
+ * parents and starting new jobs as available/necessary.
*
* Side Effects:
* Some nodes may be put on the toBeMade queue.
int reason, code;
bool done;
- debug_printf("Process %ld (%s) exited with status %d.\n",
+ debug_printf("Process %ld (%s) exited with status %d.\n",
(long)job->pid, job->node->name, status);
/* parse status */
if (WIFEXITED(status)) {
if (done || DEBUG(JOB)) {
if (reason == JOB_EXITED) {
- debug_printf("Process %ld (%s) exited.\n",
+ debug_printf("Process %ld (%s) exited.\n",
(long)job->pid, job->node->name);
if (code != 0) {
banner(job, stdout);
(void)fprintf(stdout, "*** Error code %d %s\n",
code,
- (job->node->type & OP_IGNORE) ?
+ (job->node->type & OP_IGNORE) ?
"(ignored)" : "");
if (job->node->type & OP_IGNORE) {
}
} else if (DEBUG(JOB)) {
(void)fprintf(stdout,
- "*** %ld (%s) Completed successfully\n",
+ "*** %ld (%s) Completed successfully\n",
(long)job->pid, job->node->name);
}
} else {
}
free(job);
- if (errors && !keepgoing &&
+ if (errors && !keepgoing &&
aborting != ABORT_INTERRUPT)
aborting = ABORT_ERROR;
Finish(errors);
}
-static void
+static void
prepare_pipe(struct job_pipe *p, int *fd)
{
p->pos = 0;
(void)fcntl(fd[0], F_SETFD, FD_CLOEXEC);
- p->fd = fd[0];
+ p->fd = fd[0];
close(fd[1]);
if (output_mask == NULL || p->fd > largest_fd) {
ofdn = howmany(largest_fd+1, NFDBITS);
if (fdn != ofdn) {
- output_mask = emult_realloc(output_mask, fdn,
+ output_mask = emult_realloc(output_mask, fdn,
sizeof(fd_mask));
- memset(((char *)output_mask) + ofdn * sizeof(fd_mask),
+ memset(((char *)output_mask) + ofdn * sizeof(fd_mask),
0, (fdn-ofdn) * sizeof(fd_mask));
- actual_mask = emult_realloc(actual_mask, fdn,
+ actual_mask = emult_realloc(actual_mask, fdn,
sizeof(fd_mask));
mask_size = fdn * sizeof(fd_mask);
}
/*-
*-----------------------------------------------------------------------
* JobExec --
- * Execute the shell for the given job. Called from JobStart
+ * Execute the shell for the given job. Called from JobStart
*
* Side Effects:
* A shell is executed, outputs is altered and the Job structure added
setup_engine(1);
- /* Create the pipe by which we'll get the shell's output.
+ /* Create the pipe by which we'll get the shell's output.
*/
if (pipe(fdout) == -1)
Punt("Cannot create pipe: %s", strerror(errno));
(void)fprintf(stdout, "Running %ld (%s)\n", (long)cpid,
job->node->name);
- for (ln = Lst_First(&job->node->commands); ln != NULL ;
+ for (ln = Lst_First(&job->node->commands); ln != NULL ;
ln = Lst_Adv(ln))
fprintf(stdout, "\t%s\n", (char *)Lst_Datum(ln));
(void)fflush(stdout);
*-----------------------------------------------------------------------
*/
static void
-handle_pipe(struct job_pipe *p,
+handle_pipe(struct job_pipe *p,
Job *job, FILE *out, bool finish)
{
int nr; /* number of bytes read */
* Notes:
* We do waits, blocking or not, according to the wisdom of our
* caller, until there are no more children to report. For each
- * job, call process_job_status to finish things off.
+ * job, call process_job_status to finish things off.
*-----------------------------------------------------------------------
*/
void
* Job_Full --
* See if the job table is full. It is considered full
* if we are in the process of aborting OR if we have
- * reached/exceeded our quota.
+ * reached/exceeded our quota.
*
* Results:
* true if the job table is full, false otherwise
{
if (Job_Full() || expensive_job)
return false;
- else
+ else
return true;
}
/*-
*-----------------------------------------------------------------------
* Job_Empty --
- * See if the job table is empty.
+ * See if the job table is empty.
*
* Results:
* true if it is. false if it ain't.
aborting = ABORT_ERROR;
if (nJobs) {
- for (ln = Lst_First(&runningJobs); ln != NULL;
+ for (ln = Lst_First(&runningJobs); ln != NULL;
ln = Lst_Adv(ln)) {
job = (Job *)Lst_Datum(ln);