From 93244b14fab0d3fc8580aab3bfc2b0c26d66655d Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Wed, 25 Sep 2024 16:21:05 +0200 Subject: [PATCH] rules: Ensure same number of layouts and variants --- src/xkbcomp/rules.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/xkbcomp/rules.c b/src/xkbcomp/rules.c index 934acbb7..4b3f793f 100644 --- a/src/xkbcomp/rules.c +++ b/src/xkbcomp/rules.c @@ -325,6 +325,23 @@ matcher_new(struct xkb_context *ctx, m->rmlvo.variants = split_comma_separated_mlvo(rmlvo->variant); m->rmlvo.options = split_comma_separated_mlvo(rmlvo->options); + if (darray_size(m->rmlvo.layouts) > darray_size(m->rmlvo.variants)) { + /* Do not warn if no variants was provided */ + if (!isempty(rmlvo->variant)) + log_warn(ctx, XKB_LOG_MESSAGE_NO_ID, + "More layouts than variants: \"%s\" vs. \"%s\".\n", + rmlvo->layout ? rmlvo->layout : "(none)", + rmlvo->variant ? rmlvo->variant : "(none)"); + darray_resize0(m->rmlvo.variants, darray_size(m->rmlvo.layouts)); + } else if (darray_size(m->rmlvo.layouts) < darray_size(m->rmlvo.variants)) { + log_err(ctx, XKB_LOG_MESSAGE_NO_ID, + "Less layouts than variants: \"%s\" vs. \"%s\".\n", + rmlvo->layout ? rmlvo->layout : "(none)", + rmlvo->variant ? rmlvo->variant : "(none)"); + darray_resize(m->rmlvo.variants, darray_size(m->rmlvo.layouts)); + darray_shrink(m->rmlvo.variants); + } + return m; }