summaryrefslogtreecommitdiff
path: root/usr.bin/make
diff options
context:
space:
mode:
authorsjg <sjg@NetBSD.org>2022-02-08 22:36:02 +0000
committersjg <sjg@NetBSD.org>2022-02-08 22:36:02 +0000
commit90fa6fd831261ef30d4dec7938de2e96cdeb4cf1 (patch)
tree1eff2c97e6004573d597939be9def91445eb41e4 /usr.bin/make
parentfca10445c2415aacd44b1ffacccc80f5f80bc812 (diff)
Use a variable to store command line to be filtered.
This avoids any nasty side effects from content of command line. Reviewed by: rillig
Diffstat (limited to 'usr.bin/make')
-rw-r--r--usr.bin/make/meta.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/usr.bin/make/meta.c b/usr.bin/make/meta.c
index 700d85709b5..879890a024a 100644
--- a/usr.bin/make/meta.c
+++ b/usr.bin/make/meta.c
@@ -1,4 +1,4 @@
-/* $NetBSD: meta.c,v 1.196 2022/02/04 23:22:19 rillig Exp $ */
+/* $NetBSD: meta.c,v 1.197 2022/02/08 22:36:02 sjg Exp $ */
/*
* Implement 'meta' mode.
@@ -1048,36 +1048,31 @@ append_if_new(StringList *list, const char *str)
Lst_Append(list, bmake_strdup(str));
}
+/* A "reserved" variable to store the command to be filtered */
+#define META_CMD_FILTER_VAR ".MAKE.cmd_filtered"
+
static char *
-meta_filter_cmd(Buffer *buf, GNode *gn, char *s)
+meta_filter_cmd(GNode *gn, char *s)
{
- Buf_Clear(buf);
- Buf_AddStr(buf, "${");
- Buf_AddStr(buf, s);
- Buf_AddStr(buf, ":L:${" MAKE_META_CMP_FILTER ":ts:}}");
- Var_Subst(buf->data, gn, VARE_WANTRES, &s);
+ Var_Set(gn, META_CMD_FILTER_VAR, s);
+ Var_Subst("${" META_CMD_FILTER_VAR ":${" MAKE_META_CMP_FILTER ":ts:}}", gn, VARE_WANTRES, &s);
return s;
}
static int
meta_cmd_cmp(GNode *gn, char *a, char *b, bool filter)
{
- static bool once = false;
- static Buffer buf;
int rc;
rc = strcmp(a, b);
if (rc == 0 || !filter)
return rc;
- if (!once) {
- once = true;
- Buf_Init(&buf);
- }
- a = meta_filter_cmd(&buf, gn, a);
- b = meta_filter_cmd(&buf, gn, b);
+ a = meta_filter_cmd(gn, a);
+ b = meta_filter_cmd(gn, b);
rc = strcmp(a, b);
free(a);
free(b);
+ Var_Delete(gn, META_CMD_FILTER_VAR);
return rc;
}