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 EscapeShellDblQuot from JobPri...



details:   https://anonhg.NetBSD.org/src/rev/c9d9a38aa747
branches:  trunk
changeset: 941915:c9d9a38aa747
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Nov 01 17:07:03 2020 +0000

description:
make(1): extract EscapeShellDblQuot from JobPrintCommand

diffstat:

 usr.bin/make/job.c |  37 ++++++++++++++++++++++---------------
 1 files changed, 22 insertions(+), 15 deletions(-)

diffs (65 lines):

diff -r 1292ae4bbcb2 -r c9d9a38aa747 usr.bin/make/job.c
--- a/usr.bin/make/job.c        Sun Nov 01 16:57:02 2020 +0000
+++ b/usr.bin/make/job.c        Sun Nov 01 17:07:03 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: job.c,v 1.298 2020/11/01 16:57:02 rillig Exp $ */
+/*     $NetBSD: job.c,v 1.299 2020/11/01 17:07:03 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.298 2020/11/01 16:57:02 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.299 2020/11/01 17:07:03 rillig Exp $");
 
 /* A shell defines how the commands are run.  All commands for a target are
  * written into a single file, which is then given to the shell to execute
@@ -674,6 +674,24 @@
     *pp = p;
 }
 
+/* Escape a string for a double-quoted string literal in sh, csh and ksh. */
+static char *
+EscapeShellDblQuot(const char *cmd)
+{
+    size_t i, j;
+
+    /* Worst that could happen is every char needs escaping. */
+    char *esc = bmake_malloc(strlen(cmd) * 2 + 1);
+    for (i = 0, j = 0; cmd[i] != '\0'; i++, j++) {
+       if (cmd[i] == '$' || cmd[i] == '`' || cmd[i] == '\\' || cmd[i] == '"')
+           esc[j++] = '\\';
+       esc[j] = cmd[i];
+    }
+    esc[j] = '\0';
+
+    return esc;
+}
+
 /*-
  *-----------------------------------------------------------------------
  * JobPrintCommand  --
@@ -747,19 +765,8 @@
      * and this will need the characters '$ ` \ "' escaped
      */
 
-    if (!commandShell->hasErrCtl) {
-       int i, j;
-
-       /* Worst that could happen is every char needs escaping. */
-       escCmd = bmake_malloc((strlen(cmd) * 2) + 1);
-       for (i = 0, j = 0; cmd[i] != '\0'; i++, j++) {
-           if (cmd[i] == '$' || cmd[i] == '`' || cmd[i] == '\\' ||
-               cmd[i] == '"')
-               escCmd[j++] = '\\';
-           escCmd[j] = cmd[i];
-       }
-       escCmd[j] = '\0';
-    }
+    if (!commandShell->hasErrCtl)
+        escCmd = EscapeShellDblQuot(cmd);
 
     if (shutUp) {
        if (!(job->flags & JOB_SILENT) && !noSpecials &&



Home | Main Index | Thread Index | Old Index