Sun Jul 19 15:47:10 2020 UTC ()
make(1): eliminate macro from VarGetPattern


(rillig)
diff -r1.262 -r1.263 src/usr.bin/make/var.c

cvs diff -r1.262 -r1.263 src/usr.bin/make/var.c (expand / switch to unified diff)

--- src/usr.bin/make/var.c 2020/07/19 14:05:39 1.262
+++ src/usr.bin/make/var.c 2020/07/19 15:47:10 1.263
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: var.c,v 1.262 2020/07/19 14:05:39 rillig Exp $ */ 1/* $NetBSD: var.c,v 1.263 2020/07/19 15:47:10 rillig Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1988, 1989, 1990, 1993 4 * Copyright (c) 1988, 1989, 1990, 1993
5 * The Regents of the University of California. All rights reserved. 5 * The Regents of the University of California. All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to Berkeley by 7 * This code is derived from software contributed to Berkeley by
8 * Adam de Boor. 8 * Adam de Boor.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -59,34 +59,34 @@ @@ -59,34 +59,34 @@
59 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 59 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
60 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 60 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
61 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 61 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
62 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 62 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
63 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 63 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
64 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 64 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
65 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 65 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
66 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 66 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
67 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 67 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
68 * SUCH DAMAGE. 68 * SUCH DAMAGE.
69 */ 69 */
70 70
71#ifndef MAKE_NATIVE 71#ifndef MAKE_NATIVE
72static char rcsid[] = "$NetBSD: var.c,v 1.262 2020/07/19 14:05:39 rillig Exp $"; 72static char rcsid[] = "$NetBSD: var.c,v 1.263 2020/07/19 15:47:10 rillig Exp $";
73#else 73#else
74#include <sys/cdefs.h> 74#include <sys/cdefs.h>
75#ifndef lint 75#ifndef lint
76#if 0 76#if 0
77static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; 77static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94";
78#else 78#else
79__RCSID("$NetBSD: var.c,v 1.262 2020/07/19 14:05:39 rillig Exp $"); 79__RCSID("$NetBSD: var.c,v 1.263 2020/07/19 15:47:10 rillig Exp $");
80#endif 80#endif
81#endif /* not lint */ 81#endif /* not lint */
82#endif 82#endif
83 83
84/*- 84/*-
85 * var.c -- 85 * var.c --
86 * Variable-handling functions 86 * Variable-handling functions
87 * 87 *
88 * Interface: 88 * Interface:
89 * Var_Set Set the value of a variable in the given 89 * Var_Set Set the value of a variable in the given
90 * context. The variable is created if it doesn't 90 * context. The variable is created if it doesn't
91 * yet exist. The value and variable name need not 91 * yet exist. The value and variable name need not
92 * be preserved. 92 * be preserved.
@@ -2050,38 +2050,36 @@ VarGetPattern(GNode *ctxt, Var_Parse_Sta @@ -2050,38 +2050,36 @@ VarGetPattern(GNode *ctxt, Var_Parse_Sta
2050 VarEvalFlags eflags, const char **tstr, int delim, 2050 VarEvalFlags eflags, const char **tstr, int delim,
2051 VarPatternFlags *mpflags, int *length, VarPattern *pattern) 2051 VarPatternFlags *mpflags, int *length, VarPattern *pattern)
2052{ 2052{
2053 const char *cp; 2053 const char *cp;
2054 char *rstr; 2054 char *rstr;
2055 Buffer buf; 2055 Buffer buf;
2056 int junk; 2056 int junk;
2057 VarEvalFlags errnum = eflags & VARE_UNDEFERR; 2057 VarEvalFlags errnum = eflags & VARE_UNDEFERR;
2058 2058
2059 Buf_Init(&buf, 0); 2059 Buf_Init(&buf, 0);
2060 if (length == NULL) 2060 if (length == NULL)
2061 length = &junk; 2061 length = &junk;
2062 2062
2063#define IS_A_MATCH(cp, delim) \ 
2064 ((cp[0] == '\\') && ((cp[1] == delim) || \ 
2065 (cp[1] == '\\') || (cp[1] == '$') || (pattern && (cp[1] == '&')))) 
2066 
2067 /* 2063 /*
2068 * Skim through until the matching delimiter is found; 2064 * Skim through until the matching delimiter is found;
2069 * pick up variable substitutions on the way. Also allow 2065 * pick up variable substitutions on the way. Also allow
2070 * backslashes to quote the delimiter, $, and \, but don't 2066 * backslashes to quote the delimiter, $, and \, but don't
2071 * touch other backslashes. 2067 * touch other backslashes.
2072 */ 2068 */
2073 for (cp = *tstr; *cp && (*cp != delim); cp++) { 2069 for (cp = *tstr; *cp && (*cp != delim); cp++) {
2074 if (IS_A_MATCH(cp, delim)) { 2070 Boolean is_escaped = cp[0] == '\\' && (cp[1] == delim ||
 2071 cp[1] == '\\' || cp[1] == '$' || (pattern && cp[1] == '&'));
 2072 if (is_escaped) {
2075 Buf_AddByte(&buf, cp[1]); 2073 Buf_AddByte(&buf, cp[1]);
2076 cp++; 2074 cp++;
2077 } else if (*cp == '$') { 2075 } else if (*cp == '$') {
2078 if (cp[1] == delim) { 2076 if (cp[1] == delim) {
2079 if (mpflags == NULL) 2077 if (mpflags == NULL)
2080 Buf_AddByte(&buf, *cp); 2078 Buf_AddByte(&buf, *cp);
2081 else 2079 else
2082 /* 2080 /*
2083 * Unescaped $ at end of pattern => anchor 2081 * Unescaped $ at end of pattern => anchor
2084 * pattern at end. 2082 * pattern at end.
2085 */ 2083 */
2086 *mpflags |= VARP_MATCH_END; 2084 *mpflags |= VARP_MATCH_END;
2087 } else { 2085 } else {