Module Name: src
Committed By: rillig
Date: Sun Mar 30 00:50:33 UTC 2025
Modified Files:
src/usr.bin/make: var.c
Log Message:
make: simplify error handling for unknown modifiers
To generate a diff of this commit:
cvs rdiff -u -r1.1154 -r1.1155 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.1154 src/usr.bin/make/var.c:1.1155
--- src/usr.bin/make/var.c:1.1154 Sun Mar 30 00:35:52 2025
+++ src/usr.bin/make/var.c Sun Mar 30 00:50:33 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.1154 2025/03/30 00:35:52 rillig Exp $ */
+/* $NetBSD: var.c,v 1.1155 2025/03/30 00:50:33 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -128,7 +128,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.1154 2025/03/30 00:35:52 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1155 2025/03/30 00:50:33 rillig Exp $");
/*
* Variables are defined using one of the VAR=value assignments. Their
@@ -2103,9 +2103,7 @@ typedef enum ApplyModifierResult {
AMR_OK,
/* Not a match, try the ':from=to' modifier as well. */
AMR_UNKNOWN,
- /* Error out with "Bad modifier" message. */
- AMR_BAD,
- /* Error out without the standard error message. */
+ /* Error out without further error message. */
AMR_CLEANUP
} ApplyModifierResult;
@@ -3234,7 +3232,7 @@ ApplyModifier_Words(const char **pp, Mod
{
Expr *expr = ch->expr;
int first, last;
- const char *p;
+ const char *p, *mod = *pp;
LazyBuf argBuf;
FStr arg;
@@ -3312,7 +3310,10 @@ ok:
bad_modifier:
FStr_Done(&arg);
- return AMR_BAD;
+ /* Take a guess at where the modifier ends. */
+ Parse_Error(PARSE_FATAL, "Bad modifier \":%.*s\"",
+ (int)strcspn(mod, ":)}"), mod);
+ return AMR_CLEANUP;
}
#if __STDC_VERSION__ >= 199901L
@@ -3555,7 +3556,10 @@ ApplyModifier_Assign(const char **pp, Mo
found_op:
if (expr->name[0] == '\0') {
*pp = mod + 1;
- return AMR_BAD;
+ /* Take a guess at where the modifier ends. */
+ Parse_Error(PARSE_FATAL, "Bad modifier \":%.*s\"",
+ (int)strcspn(mod, ":)}"), mod);
+ return AMR_CLEANUP;
}
*pp = mod + (op[0] != '=' ? 3 : 2);
@@ -4058,7 +4062,6 @@ ApplyModifiers(
{
ModChain ch = ModChain_Init(expr, startc, endc, ' ', false);
const char *p;
- const char *mod;
assert(startc == '(' || startc == '{' || startc == '\0');
assert(endc == ')' || endc == '}' || endc == '\0');
@@ -4089,24 +4092,15 @@ ApplyModifiers(
break;
}
- mod = p;
-
res = ApplySingleModifier(&p, &ch);
if (res == AMR_CLEANUP)
goto cleanup;
- if (res == AMR_BAD)
- goto bad_modifier;
}
*pp = p;
assert(Expr_Str(expr) != NULL); /* Use var_Error or varUndefined. */
return;
-bad_modifier:
- /* Take a guess at where the modifier ends. */
- Parse_Error(PARSE_FATAL, "Bad modifier \":%.*s\"",
- (int)strcspn(mod, ":)}"), mod);
-
cleanup:
/*
* TODO: Use p + strlen(p) instead, to stop parsing immediately.