From 15a13ef93e6a0d4dcd8398d2f19f1052baf68454 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 16 Jul 2025 01:18:32 +0200 Subject: [PATCH] xkb: XkbAssembleMap(): use x_rpcbuf_t for writing the virtual mods As we now have x_rpcbuf, we can use it here, instead of meddling with pre-allocated buffer space directly via raw pointer. Signed-off-by: Enrico Weigelt, metux IT consult --- xkb/xkb.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/xkb/xkb.c b/xkb/xkb.c index 29342e6a2..5b53fc4ce 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -1372,18 +1372,19 @@ static void XkbAssembleMap(ClientPtr client, XkbDescPtr xkb, if (rep.totalKeyBehaviors > 0) XkbWriteKeyBehaviors(xkb, rep.firstKeyBehavior, rep.nKeyBehaviors, rpcbuf); - char *desc = rpcbuf->buffer + rpcbuf->wpos; - if (rep.virtualMods) { - register int sz; - - for (int i = sz = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) { + CARD8 vmods[XkbPaddedSize(XkbNumVirtualMods)] = { 0 }; + size_t sz = 0; + for (size_t i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) { if (rep.virtualMods & bit) { - desc[sz++] = xkb->server->vmods[i]; + vmods[sz++] = xkb->server->vmods[i]; } } - desc += XkbPaddedSize(sz); + x_rpcbuf_write_CARD8s(rpcbuf, vmods, XkbPaddedSize(sz)); } + + char *desc = rpcbuf->buffer + rpcbuf->wpos; + if (rep.totalKeyExplicit > 0) desc = XkbWriteExplicit(xkb, rep.firstKeyExplicit, rep.nKeyExplicit, desc); if (rep.totalModMapKeys > 0)