From: Karel Zak Date: Thu, 2 Nov 2023 13:11:22 +0000 (+0100) Subject: libsmartcols: improve parser error messages X-Git-Tag: v2.40-rc1~151^2~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=454349a2128c072d7f9f72173f4fe8d9208a771d;p=thirdparty%2Futil-linux.git libsmartcols: improve parser error messages * remove T_ prefix for tokens in error message (the error message is generated by bison) * use rename T_NAME to T_HOLDER to be consistent with library API Signed-off-by: Karel Zak --- diff --git a/libsmartcols/src/filter-parser.h b/libsmartcols/src/filter-parser.h index 7aa620a38f..81eed1fbf5 100644 --- a/libsmartcols/src/filter-parser.h +++ b/libsmartcols/src/filter-parser.h @@ -62,7 +62,7 @@ extern int yydebug; YYUNDEF = 257, /* "invalid token" */ T_NUMBER = 258, /* T_NUMBER */ T_STRING = 259, /* T_STRING */ - T_NAME = 260, /* T_NAME */ + T_HOLDER = 260, /* T_HOLDER */ T_FLOAT = 261, /* T_FLOAT */ T_OR = 262, /* T_OR */ T_AND = 263, /* T_AND */ @@ -87,7 +87,7 @@ extern int yydebug; #define YYUNDEF 257 #define T_NUMBER 258 #define T_STRING 259 -#define T_NAME 260 +#define T_HOLDER 260 #define T_FLOAT 261 #define T_OR 262 #define T_AND 263 diff --git a/libsmartcols/src/filter-parser.y b/libsmartcols/src/filter-parser.y index e1fa48ce03..0af556c25a 100644 --- a/libsmartcols/src/filter-parser.y +++ b/libsmartcols/src/filter-parser.y @@ -42,7 +42,7 @@ void yyerror(yyscan_t *locp, struct libscols_filter *fltr, char const *msg); } %token T_NUMBER %token T_STRING -%token T_NAME +%token T_HOLDER %token T_FLOAT %type param expr @@ -87,7 +87,7 @@ expr: param: T_NUMBER { $$ = filter_new_param(fltr, SCOLS_DATA_U64, 0, (void *) (&$1)); } | T_FLOAT { $$ = filter_new_param(fltr, SCOLS_DATA_FLOAT, 0, (void *) (&$1)); } - | T_NAME { $$ = filter_new_param(fltr, SCOLS_DATA_NONE, F_HOLDER_COLUMN, (void *) $1); } + | T_HOLDER { $$ = filter_new_param(fltr, SCOLS_DATA_NONE, F_HOLDER_COLUMN, (void *) $1); } | T_STRING { $$ = filter_new_param(fltr, SCOLS_DATA_STRING, 0, (void *) $1); } | T_TRUE { bool x = true; @@ -108,9 +108,18 @@ void yyerror (yyscan_t *locp __attribute__((__unused__)), char const *msg) { if (msg && fltr) { + char *p; + if (fltr->errmsg) free(fltr->errmsg); fltr->errmsg = strdup(msg); + + p = strstr(fltr->errmsg, "T_"); + if (p) { + size_t sz = strlen(fltr->errmsg); + memmove(p, p + 2, sz - 1 - (p - fltr->errmsg)); + } + if (!fltr->errmsg) return; } diff --git a/libsmartcols/src/filter-scanner.l b/libsmartcols/src/filter-scanner.l index 1c06e8e7c9..8de686818f 100644 --- a/libsmartcols/src/filter-scanner.l +++ b/libsmartcols/src/filter-scanner.l @@ -50,7 +50,7 @@ true|TRUE return T_TRUE; {id} { yylval->param_name = yytext; - return T_NAME; + return T_HOLDER; } {str_ap}|{str_qu} {