Module Name: src Committed By: rillig Date: Sun Nov 1 17:07:03 UTC 2020
Modified Files: src/usr.bin/make: job.c Log Message: make(1): extract EscapeShellDblQuot from JobPrintCommand To generate a diff of this commit: cvs rdiff -u -r1.298 -r1.299 src/usr.bin/make/job.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/job.c diff -u src/usr.bin/make/job.c:1.298 src/usr.bin/make/job.c:1.299 --- src/usr.bin/make/job.c:1.298 Sun Nov 1 16:57:02 2020 +++ src/usr.bin/make/job.c Sun Nov 1 17:07:03 2020 @@ -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 @@ ParseRunOptions( *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 @@ JobPrintCommand(Job *job, char *cmd) * 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 &&