diff options
| author | sjg <sjg@NetBSD.org> | 2022-02-08 22:36:02 +0000 |
|---|---|---|
| committer | sjg <sjg@NetBSD.org> | 2022-02-08 22:36:02 +0000 |
| commit | 90fa6fd831261ef30d4dec7938de2e96cdeb4cf1 (patch) | |
| tree | 1eff2c97e6004573d597939be9def91445eb41e4 /usr.bin/make | |
| parent | fca10445c2415aacd44b1ffacccc80f5f80bc812 (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.c | 25 |
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; } |
