summaryrefslogtreecommitdiff
path: root/var.c
diff options
context:
space:
mode:
Diffstat (limited to 'var.c')
-rw-r--r--var.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/var.c b/var.c
index 0e2460f131c7..b9b316939492 100644
--- a/var.c
+++ b/var.c
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.218 2018/02/18 00:52:42 sjg Exp $ */
+/* $NetBSD: var.c,v 1.220 2018/05/27 01:14:51 christos Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.218 2018/02/18 00:52:42 sjg Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.220 2018/05/27 01:14:51 christos Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: var.c,v 1.218 2018/02/18 00:52:42 sjg Exp $");
+__RCSID("$NetBSD: var.c,v 1.220 2018/05/27 01:14:51 christos Exp $");
#endif
#endif /* not lint */
#endif
@@ -324,7 +324,7 @@ static Boolean VarLoopExpand(GNode *, Var_Parse_State *,
static char *VarGetPattern(GNode *, Var_Parse_State *,
int, const char **, int, int *, int *,
VarPattern *);
-static char *VarQuote(char *);
+static char *VarQuote(char *, Boolean);
static char *VarHash(char *);
static char *VarModify(GNode *, Var_Parse_State *,
const char *,
@@ -2315,6 +2315,7 @@ VarGetPattern(GNode *ctxt, Var_Parse_State *vpstate MAKE_ATTR_UNUSED,
*-----------------------------------------------------------------------
* VarQuote --
* Quote shell meta-characters and space characters in the string
+ * if quoteDollar is set, also quote and double any '$' characters.
*
* Results:
* The quoted string
@@ -2325,7 +2326,7 @@ VarGetPattern(GNode *ctxt, Var_Parse_State *vpstate MAKE_ATTR_UNUSED,
*-----------------------------------------------------------------------
*/
static char *
-VarQuote(char *str)
+VarQuote(char *str, Boolean quoteDollar)
{
Buffer buf;
@@ -2346,6 +2347,8 @@ VarQuote(char *str)
if (isspace((unsigned char)*str) || ismeta((unsigned char)*str))
Buf_AddByte(&buf, '\\');
Buf_AddByte(&buf, *str);
+ if (quoteDollar && *str == '$')
+ Buf_AddBytes(&buf, 2, "\\$");
}
str = Buf_Destroy(&buf, FALSE);
@@ -3485,9 +3488,10 @@ ApplyModifiers(char *nstr, const char *tstr,
break;
}
#endif
+ case 'q':
case 'Q':
if (tstr[1] == endc || tstr[1] == ':') {
- newStr = VarQuote(nstr);
+ newStr = VarQuote(nstr, modifier == 'q');
cp = tstr + 1;
termc = *cp;
break;