Module Name: src
Committed By: rillig
Date: Sun Nov 19 11:30:28 UTC 2023
Modified Files:
src/usr.bin/make: var.c
Log Message:
make: extract detection of ':from=to' to a separate function
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.1070 -r1.1071 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.1070 src/usr.bin/make/var.c:1.1071
--- src/usr.bin/make/var.c:1.1070 Sun Nov 19 09:45:19 2023
+++ src/usr.bin/make/var.c Sun Nov 19 11:30:28 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.1070 2023/11/19 09:45:19 rillig Exp $ */
+/* $NetBSD: var.c,v 1.1071 2023/11/19 11:30:28 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -139,7 +139,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.1070 2023/11/19 09:45:19 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1071 2023/11/19 11:30:28 rillig Exp $");
/*
* Variables are defined using one of the VAR=value assignments. Their
@@ -3687,6 +3687,26 @@ ApplyModifier_Unique(const char **pp, Mo
}
#ifdef SYSVVARSUB
+/* Test whether the modifier has the form '<lhs>=<rhs>'. */
+static bool
+IsSysVModifier(const char *p, char startc, char endc)
+{
+ bool eqFound = false;
+
+ int depth = 1;
+ while (*p != '\0' && depth > 0) {
+ if (*p == '=') /* XXX: should also test depth == 1 */
+ eqFound = true;
+ else if (*p == endc)
+ depth--;
+ else if (*p == startc)
+ depth++;
+ if (depth > 0)
+ p++;
+ }
+ return *p == endc && eqFound;
+}
+
/* :from=to */
static ApplyModifierResult
ApplyModifier_SysV(const char **pp, ModChain *ch)
@@ -3699,26 +3719,8 @@ ApplyModifier_SysV(const char **pp, ModC
const char *lhsSuffix;
const char *mod = *pp;
- bool eqFound = false;
- /*
- * First we make a pass through the string trying to verify it is a
- * SysV-make-style translation. It must be: <lhs>=<rhs>
- */
- int depth = 1;
- const char *p = mod;
- while (*p != '\0' && depth > 0) {
- if (*p == '=') { /* XXX: should also test depth == 1 */
- eqFound = true;
- /* continue looking for ch->endc */
- } else if (*p == ch->endc)
- depth--;
- else if (*p == ch->startc)
- depth++;
- if (depth > 0)
- p++;
- }
- if (*p != ch->endc || !eqFound)
+ if (!IsSysVModifier(mod, ch->startc, ch->endc))
return AMR_UNKNOWN;
if (!ParseModifierPart(pp, '=', expr->emode, ch, &lhsBuf))