From 036cbb4ff22991dcae2573708c530f667ba02014 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 16 Jul 2025 05:37:33 +0200 Subject: [PATCH] Xi: ProcXGetDeviceDontPropagateList(): use x_rpcbuf_t Use x_rpcbuf_t for reply payload assembly and byte-swapping, instead of writing in little pieces via complicated callbacks. Signed-off-by: Enrico Weigelt, metux IT consult --- Xi/getprop.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Xi/getprop.c b/Xi/getprop.c index 108c52cb65..d7c737ff45 100644 --- a/Xi/getprop.c +++ b/Xi/getprop.c @@ -56,6 +56,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/rpcbuf_priv.h" #include "inputstr.h" /* DeviceIntPtr */ #include "windowstr.h" /* window structs */ @@ -109,6 +110,8 @@ ProcXGetDeviceDontPropagateList(ClientPtr client) if (rc != Success) return rc; + x_rpcbuf_t rpcbuf = { .swapped = client->swapped, .err_clear = TRUE }; + if ((others = wOtherInputMasks(pWin)) != 0) { for (i = 0; i < EMASKSIZE; i++) ClassFromMask(NULL, others->dontPropagateMask[i], i, &count, COUNT); @@ -123,21 +126,22 @@ ProcXGetDeviceDontPropagateList(ClientPtr client) for (i = 0; i < EMASKSIZE; i++) tbuf = ClassFromMask(tbuf, others->dontPropagateMask[i], i, NULL, CREATE); + + x_rpcbuf_write_CARD32s(&rpcbuf, buf, count); + free(buf); } } + if (rpcbuf.error) + return BadAlloc; + if (client->swapped) { swaps(&rep.sequenceNumber); swapl(&rep.length); swaps(&rep.count); } WriteToClient(client, sizeof(xGetDeviceDontPropagateListReply), &rep); - - if (count) { - client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write; - WriteSwappedDataToClient(client, count * sizeof(XEventClass), buf); - free(buf); - } + WriteRpcbufToClient(client, &rpcbuf); return Success; }