From 90a99141b5acef553894f2583b36456336b28862 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 17 Jul 2025 20:52:31 +0200 Subject: [PATCH] Xext: xv: ProcXvQueryEncodings(): use x_rpcbuf_t for reply payload assembly Simplify reply payload assembly via x_rpcbuf_t. Signed-off-by: Enrico Weigelt, metux IT consult --- Xext/xvdisp.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c index aa5da206f..2b54ae171 100644 --- a/Xext/xvdisp.c +++ b/Xext/xvdisp.c @@ -31,6 +31,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/rpcbuf_priv.h" #include "Xext/xvdix_priv.h" #include "Xext/panoramiX.h" #include "Xext/panoramiXsrv.h" @@ -183,7 +184,6 @@ static int ProcXvQueryEncodings(ClientPtr client) { int totalSize; - int nameSize; XvPortPtr pPort; int ne; XvEncodingPtr pe; @@ -216,32 +216,29 @@ ProcXvQueryEncodings(ClientPtr client) swaps(&rep.num_encodings); } - WriteToClient(client, sizeof(rep), &rep); + x_rpcbuf_t rpcbuf = { .swapped = client->swapped, .err_clear = TRUE }; ne = pPort->pAdaptor->nEncodings; pe = pPort->pAdaptor->pEncodings; while (ne--) { - xvEncodingInfo einfo = { 0 }; - einfo.encoding = pe->id; - einfo.name_size = nameSize = strlen(pe->name); - einfo.width = pe->width; - einfo.height = pe->height; - einfo.rate.numerator = pe->rate.numerator; - einfo.rate.denominator = pe->rate.denominator; + size_t nameSize = strlen(pe->name); + + x_rpcbuf_write_CARD32(&rpcbuf, pe->id); + x_rpcbuf_write_CARD16(&rpcbuf, nameSize); + x_rpcbuf_write_CARD16(&rpcbuf, pe->width); + x_rpcbuf_write_CARD16(&rpcbuf, pe->height); + x_rpcbuf_write_CARD32(&rpcbuf, pe->rate.numerator); + x_rpcbuf_write_CARD32(&rpcbuf, pe->rate.denominator); + x_rpcbuf_write_string_pad(&rpcbuf, pe->name); - if (client->swapped) { - swapl(&einfo.encoding); - swaps(&einfo.name_size); - swaps(&einfo.width); - swaps(&einfo.height); - swapl(&einfo.rate.numerator); - swapl(&einfo.rate.denominator); - } - WriteToClient(client, sz_xvEncodingInfo, &einfo); - WriteToClient(client, nameSize, pe->name); pe++; } + if (rpcbuf.error) + return BadAlloc; + + WriteToClient(client, sizeof(rep), &rep); + WriteRpcbufToClient(client, &rpcbuf); return Success; }