From d0e24582a028db6ac912df6ca43f4ccb7775252d Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 1 Sep 2025 18:12:48 +0200 Subject: [PATCH] randr: ProcRRGetProviders(): use x_rpcbuf_t Use x_rpcbuf_t for reply payload assembly and X_SEND_REPLY_WITH_RPCBUF() for sending it all out. Signed-off-by: Enrico Weigelt, metux IT consult --- randr/rrprovider.c | 52 ++++++++-------------------------------------- 1 file changed, 9 insertions(+), 43 deletions(-) diff --git a/randr/rrprovider.c b/randr/rrprovider.c index 9dca232323..6c7e9c3248 100644 --- a/randr/rrprovider.c +++ b/randr/rrprovider.c @@ -46,9 +46,7 @@ RRProviderInitErrorValue(void) #define ADD_PROVIDER(_pScreen) do { \ pScrPriv = rrGetScrPriv((_pScreen)); \ if (pScrPriv->provider) { \ - providers[count_providers] = pScrPriv->provider->id; \ - if (client->swapped) \ - swapl(&providers[count_providers]); \ + x_rpcbuf_write_CARD32(&rpcbuf, pScrPriv->provider->id); \ count_providers++; \ } \ } while(0) @@ -61,10 +59,6 @@ ProcRRGetProviders (ClientPtr client) ScreenPtr pScreen; rrScrPrivPtr pScrPriv; int rc; - CARD8 *extra; - unsigned int extraLen; - RRProvider *providers; - int total_providers = 0, count_providers = 0; ScreenPtr iter; REQUEST_SIZE_MATCH(xRRGetProvidersReq); @@ -75,16 +69,6 @@ ProcRRGetProviders (ClientPtr client) pScreen = pWin->drawable.pScreen; pScrPriv = rrGetScrPriv(pScreen); - - if (pScrPriv->provider) - total_providers++; - xorg_list_for_each_entry(iter, &pScreen->secondary_list, secondary_head) { - pScrPriv = rrGetScrPriv(iter); - total_providers += pScrPriv->provider ? 1 : 0; - } - - pScrPriv = rrGetScrPriv(pScreen); - if (!pScrPriv) { xRRGetProvidersReply reply = { @@ -95,42 +79,24 @@ ProcRRGetProviders (ClientPtr client) return X_SEND_REPLY_SIMPLE(client, reply); } - extraLen = total_providers * sizeof(CARD32); + x_rpcbuf_t rpcbuf = { .swapped = client->swapped, .err_clear = TRUE }; - xRRGetProvidersReply rep = { - .type = X_Reply, - .sequenceNumber = client->sequence, - .timestamp = pScrPriv->lastSetTime.milliseconds, - .nProviders = total_providers, - .length = bytes_to_int32(extraLen), - }; - - if (extraLen) { - extra = calloc(1, extraLen); - if (!extra) - return BadAlloc; - } else - extra = NULL; - - providers = (RRProvider *)extra; + CARD16 count_providers = 0; ADD_PROVIDER(pScreen); xorg_list_for_each_entry(iter, &pScreen->secondary_list, secondary_head) { ADD_PROVIDER(iter); } + xRRGetProvidersReply rep = { + .timestamp = pScrPriv->lastSetTime.milliseconds, + .nProviders = count_providers, + }; + if (client->swapped) { - swaps(&rep.sequenceNumber); - swapl(&rep.length); swapl(&rep.timestamp); swaps(&rep.nProviders); } - WriteToClient(client, sizeof(xRRGetProvidersReply), (char *)&rep); - if (extraLen) - { - WriteToClient (client, extraLen, (char *) extra); - free(extra); - } - return Success; + return X_SEND_REPLY_WITH_RPCBUF(client, rep, rpcbuf); } int