[PATCH 08/10] hush: Be more informative on syntax error

Sascha Hauer s.hauer at pengutronix.de
Tue Nov 12 08:52:17 EST 2013


Print the token that led to a syntax error, at least for the common
case.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 common/hush.c | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/common/hush.c b/common/hush.c
index 3c4d244..35c3c3c 100644
--- a/common/hush.c
+++ b/common/hush.c
@@ -264,8 +264,27 @@ struct in_str {
 
 #define final_printf debug
 
-static void syntax(void) {
-	 printf("syntax error\n");
+static void syntax(void)
+{
+	printf("syntax error\n");
+}
+
+static void syntaxf(const char *fmt, ...)
+{
+	va_list args;
+
+	printf("syntax error: ");
+
+	va_start(args, fmt);
+
+	vprintf(fmt, args);
+
+	va_end(args);
+}
+
+static void syntax_unexpected_token(const char *token)
+{
+	syntaxf("unexpected token `%s'\n", token);
 }
 
 /*   o_string manipulation: */
@@ -1201,7 +1220,7 @@ static int reserved_word(o_string *dest, struct p_context *ctx)
 				initialize_context(ctx);
 				ctx->stack = new;
 			} else if (ctx->w == RES_NONE || !(ctx->old_flag & (1 << r->code))) {
-				syntax();
+				syntax_unexpected_token(r->literal);
 				ctx->w = RES_SNTX;
 				b_reset(dest);
 				return 1;
-- 
1.8.4.2




More information about the barebox mailing list