Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make make(1): extract JobOpenTmpFile from JobStart



details:   https://anonhg.NetBSD.org/src/rev/93625af147ba
branches:  trunk
changeset: 1017030:93625af147ba
user:      rillig <rillig%NetBSD.org@localhost>
date:      Thu Dec 10 23:03:00 2020 +0000

description:
make(1): extract JobOpenTmpFile from JobStart

diffstat:

 usr.bin/make/job.c |  117 ++++++++++++++++++++++++++++------------------------
 1 files changed, 62 insertions(+), 55 deletions(-)

diffs (152 lines):

diff -r 19a35b8d6d22 -r 93625af147ba usr.bin/make/job.c
--- a/usr.bin/make/job.c        Thu Dec 10 22:45:30 2020 +0000
+++ b/usr.bin/make/job.c        Thu Dec 10 23:03:00 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: job.c,v 1.360 2020/12/10 22:45:30 rillig Exp $ */
+/*     $NetBSD: job.c,v 1.361 2020/12/10 23:03:00 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -143,7 +143,7 @@
 #include "trace.h"
 
 /*     "@(#)job.c      8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: job.c,v 1.360 2020/12/10 22:45:30 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.361 2020/12/10 23:03:00 rillig Exp $");
 
 /*
  * A shell defines how the commands are run.  All commands for a target are
@@ -1499,6 +1499,65 @@
        argv[argc] = NULL;
 }
 
+static void
+JobOpenTmpFile(Job *job, GNode *gn, Boolean cmdsOK, Boolean *out_run)
+{
+       /*
+        * tfile is the name of a file into which all shell commands
+        * are put. It is removed before the child shell is executed,
+        * unless DEBUG(SCRIPT) is set.
+        */
+       char *tfile;
+       sigset_t mask;
+       int tfd;                /* File descriptor to the temp file */
+
+       /*
+        * We're serious here, but if the commands were bogus, we're
+        * also dead...
+        */
+       if (!cmdsOK) {
+               PrintOnError(gn, NULL); /* provide some clue */
+               DieHorribly();
+       }
+
+       JobSigLock(&mask);
+       tfd = mkTempFile(TMPPAT, &tfile);
+       if (!DEBUG(SCRIPT))
+               (void)eunlink(tfile);
+       JobSigUnlock(&mask);
+
+       job->cmdFILE = fdopen(tfd, "w+");
+       if (job->cmdFILE == NULL)
+               Punt("Could not fdopen %s", tfile);
+
+       (void)fcntl(fileno(job->cmdFILE), F_SETFD, FD_CLOEXEC);
+       /*
+        * Send the commands to the command file, flush all its
+        * buffers then rewind and remove the thing.
+        */
+       *out_run = TRUE;
+
+#ifdef USE_META
+       if (useMeta) {
+               meta_job_start(job, gn);
+               if (Targ_Silent(gn)) /* might have changed */
+                       job->echo = FALSE;
+       }
+#endif
+       /* We can do all the commands at once. hooray for sanity */
+       numCommands = 0;
+       JobPrintCommands(job);
+
+       /*
+        * If we didn't print out any commands to the shell script,
+        * there's no point in executing the shell.
+        */
+       if (numCommands == 0)
+               *out_run = FALSE;
+
+       free(tfile);
+}
+
 /*
  * Start a target-creation process going for the target described by the
  * graph node gn.
@@ -1526,7 +1585,6 @@
        char *argv[10];         /* Argument vector to shell */
        Boolean cmdsOK;         /* true if the nodes commands were all right */
        Boolean run;
-       int tfd;                /* File descriptor to the temp file */
 
        for (job = job_table; job < job_table_end; job++) {
                if (job->status == JOB_ST_FREE)
@@ -1560,58 +1618,7 @@
         */
        if (((gn->type & OP_MAKE) && !opts.noRecursiveExecute) ||
            (!opts.noExecute && !opts.touchFlag)) {
-               /*
-                * tfile is the name of a file into which all shell commands
-                * are put. It is removed before the child shell is executed,
-                * unless DEBUG(SCRIPT) is set.
-                */
-               char *tfile;
-               sigset_t mask;
-               /*
-                * We're serious here, but if the commands were bogus, we're
-                * also dead...
-                */
-               if (!cmdsOK) {
-                       PrintOnError(gn, NULL); /* provide some clue */
-                       DieHorribly();
-               }
-
-               JobSigLock(&mask);
-               tfd = mkTempFile(TMPPAT, &tfile);
-               if (!DEBUG(SCRIPT))
-                       (void)eunlink(tfile);
-               JobSigUnlock(&mask);
-
-               job->cmdFILE = fdopen(tfd, "w+");
-               if (job->cmdFILE == NULL)
-                       Punt("Could not fdopen %s", tfile);
-
-               (void)fcntl(fileno(job->cmdFILE), F_SETFD, FD_CLOEXEC);
-               /*
-                * Send the commands to the command file, flush all its
-                * buffers then rewind and remove the thing.
-                */
-               run = TRUE;
-
-#ifdef USE_META
-               if (useMeta) {
-                       meta_job_start(job, gn);
-                       if (Targ_Silent(gn)) /* might have changed */
-                               job->echo = FALSE;
-               }
-#endif
-               /* We can do all the commands at once. hooray for sanity */
-               numCommands = 0;
-               JobPrintCommands(job);
-
-               /*
-                * If we didn't print out any commands to the shell script,
-                * there's no point in executing the shell.
-                */
-               if (numCommands == 0)
-                       run = FALSE;
-
-               free(tfile);
+               JobOpenTmpFile(job, gn, cmdsOK, &run);
        } else if (!GNode_ShouldExecute(gn)) {
                /*
                 * Not executing anything -- just print all the commands to



Home | Main Index | Thread Index | Old Index