Module Name: src
Committed By: rillig
Date: Fri Jul 3 22:34:22 UTC 2020
Modified Files:
src/usr.bin/make: var.c
Log Message:
make(1): refactor ApplyModifier_SysV to have less indentation
To generate a diff of this commit:
cvs rdiff -u -r1.244 -r1.245 src/usr.bin/make/var.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/var.c
diff -u src/usr.bin/make/var.c:1.244 src/usr.bin/make/var.c:1.245
--- src/usr.bin/make/var.c:1.244 Fri Jul 3 22:10:42 2020
+++ src/usr.bin/make/var.c Fri Jul 3 22:34:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.244 2020/07/03 22:10:42 rillig Exp $ */
+/* $NetBSD: var.c,v 1.245 2020/07/03 22:34:22 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.244 2020/07/03 22:10:42 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.245 2020/07/03 22:34:22 rillig 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.244 2020/07/03 22:10:42 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.245 2020/07/03 22:34:22 rillig Exp $");
#endif
#endif /* not lint */
#endif
@@ -1975,7 +1975,8 @@ VarRange(const char *str, int ac)
/*-
*-----------------------------------------------------------------------
* VarGetPattern --
- * Pass through the tstr looking for 1) escaped delimiters,
+ * During the parsing of a part of a modifier such as :S or :@,
+ * pass through the tstr looking for 1) escaped delimiters,
* '$'s and backslashes (place the escaped character in
* uninterpreted) and 2) unescaped $'s that aren't before
* the delimiter (expand the variable substitution unless flags
@@ -3181,10 +3182,10 @@ ApplyModifier_SysV(ApplyModifiersState *
* substitution command.
*/
VarPattern pattern;
- Boolean eqFound;
+ Boolean eqFound = FALSE;
pattern.flags = 0;
- eqFound = FALSE;
+
/*
* First we make a pass through the string trying
* to verify it is a SYSV-make-style translation:
@@ -3203,42 +3204,39 @@ ApplyModifier_SysV(ApplyModifiersState *
if (st->cnt)
st->cp++;
}
- if (*st->cp == st->endc && eqFound) {
+ if (*st->cp != st->endc || !eqFound)
+ return 0;
- /*
- * Now we break this sucker into the lhs and
- * rhs. We must null terminate them of course.
- */
- st->delim='=';
- st->cp = st->tstr;
- if ((pattern.lhs = VarGetPattern(st->ctxt, &st->parsestate,
- st->flags, &st->cp, st->delim, &pattern.flags,
- &pattern.leftLen, NULL)) == NULL)
- return 'c';
- st->delim = st->endc;
- if ((pattern.rhs = VarGetPattern(st->ctxt, &st->parsestate,
- st->flags, &st->cp, st->delim, NULL, &pattern.rightLen,
- &pattern)) == NULL)
- return 'c';
+ st->delim = '=';
+ st->cp = st->tstr;
+ pattern.lhs = VarGetPattern(
+ st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim,
+ &pattern.flags, &pattern.leftLen, NULL);
+ if (pattern.lhs == NULL)
+ return 'c';
- /*
- * SYSV modifications happen through the whole
- * string. Note the pattern is anchored at the end.
- */
- st->termc = *--st->cp;
- st->delim = '\0';
- if (pattern.leftLen == 0 && *st->nstr == '\0') {
- st->newStr = st->nstr; /* special case */
- } else {
- st->newStr = VarModify(st->ctxt, &st->parsestate, st->nstr,
- VarSYSVMatch,
- &pattern);
- }
- free(UNCONST(pattern.lhs));
- free(UNCONST(pattern.rhs));
- return '=';
- } else
- return 0;
+ st->delim = st->endc;
+ pattern.rhs = VarGetPattern(
+ st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim,
+ NULL, &pattern.rightLen, &pattern);
+ if (pattern.rhs == NULL)
+ return 'c';
+
+ /*
+ * SYSV modifications happen through the whole
+ * string. Note the pattern is anchored at the end.
+ */
+ st->termc = *--st->cp;
+ st->delim = '\0';
+ if (pattern.leftLen == 0 && *st->nstr == '\0') {
+ st->newStr = st->nstr; /* special case */
+ } else {
+ st->newStr = VarModify(
+ st->ctxt, &st->parsestate, st->nstr, VarSYSVMatch, &pattern);
+ }
+ free(UNCONST(pattern.lhs));
+ free(UNCONST(pattern.rhs));
+ return '=';
}
#endif