From b3dba741526e95ec60b9a415e77123b9506ce19d Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 29 Jul 2024 17:48:36 +0200 Subject: [PATCH] (!1794) randr: ProcRRGetMonitors() use SwapLongs instead of callbacks WriteSwappedDataToClient() calls a callback on each single field. We can have it easier and more efficient by just using SwapLongs() Signed-off-by: Enrico Weigelt, metux IT consult --- randr/rrmonitor.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/randr/rrmonitor.c b/randr/rrmonitor.c index c77978e33..8e0e2f85f 100644 --- a/randr/rrmonitor.c +++ b/randr/rrmonitor.c @@ -622,8 +622,6 @@ ProcRRGetMonitors(ClientPtr client) } WriteToClient(client, sizeof(xRRGetMonitorsReply), &rep); - client->pSwapReplyFunc = (ReplySwapPtr) CopySwap32Write; - for (m = 0; m < nmonitors; m++) { RRMonitorPtr monitor = &monitors[m]; xRRMonitorInfo info = { @@ -649,8 +647,13 @@ ProcRRGetMonitors(ClientPtr client) swapl(&info.heightInMillimeters); } + RROutput outputs[monitor->numOutputs]; + memcpy(outputs, monitor->outputs, monitor->numOutputs * sizeof (RROutput)); + + if (client->swapped) SwapLongs(outputs, monitor->numOutputs); + WriteToClient(client, sizeof(xRRMonitorInfo), &info); - WriteSwappedDataToClient(client, monitor->numOutputs * sizeof (RROutput), monitor->outputs); + WriteToClient(client, sizeof(outputs), outputs); } RRMonitorFreeList(monitors, nmonitors);