From 0da68bc648de409b61d691fc9a3c31ada8a00958 Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Tue, 4 Jul 2023 09:23:24 +0200 Subject: [PATCH] Simplify parsing of numeric keysyms in parser.y In `parser.y`, a numeric keysym is parsed by formatting it in its hexadecimal form then parsed as a keysym name. This is convoluted. Fixed by checking directly the upper bound. --- src/xkbcomp/parser.y | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/xkbcomp/parser.y b/src/xkbcomp/parser.y index 87dea65..d4f62c0 100644 --- a/src/xkbcomp/parser.y +++ b/src/xkbcomp/parser.y @@ -37,6 +37,7 @@ #include "xkbcomp/ast-build.h" #include "xkbcomp/parser-priv.h" #include "scanner-utils.h" +#include "keysym.h" struct parser_param { struct xkb_context *ctx; @@ -735,18 +736,19 @@ KeySym : IDENT | SECTION { $$ = XKB_KEY_section; } | Integer { - if ($1 < 0) { + if ($1 < XKB_KEYSYM_MIN) { parser_warn(param, "unrecognized keysym \"%"PRId64"\"", $1); $$ = XKB_KEY_NoSymbol; } + /* Special case for digits 0..9 */ else if ($1 < 10) { /* XKB_KEY_0 .. XKB_KEY_9 */ $$ = XKB_KEY_0 + (xkb_keysym_t) $1; } else { - char buf[32]; - snprintf(buf, sizeof(buf), "0x%"PRIx64, $1); - if (!resolve_keysym(buf, &$$)) { - parser_warn(param, "unrecognized keysym \"%s\"", buf); + if ($1 <= XKB_KEYSYM_MAX) { + $$ = (xkb_keysym_t) $1; + } else { + parser_warn(param, "unrecognized keysym \"0x%"PRIx64"\"", $1); $$ = XKB_KEY_NoSymbol; } } -- 2.7.4