From b33244566c4aa95ec3687de7845b3fbe123a53bc Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 16 Jul 2025 03:05:30 +0200 Subject: [PATCH] vidmode: ProcVidModeGetAllModeLines(): drop length computation Since the x_rpcbuf already knows how much had been written, there's no need for extra payload size computation anymore - just pick the number of written bytes from the x_rpcbuf. Signed-off-by: Enrico Weigelt, metux IT consult --- Xext/vidmode.c | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/Xext/vidmode.c b/Xext/vidmode.c index 4d8c9407a..59295a5f0 100644 --- a/Xext/vidmode.c +++ b/Xext/vidmode.c @@ -380,26 +380,7 @@ ProcVidModeGetAllModeLines(ClientPtr client) if (!pVidMode->GetFirstModeline(pScreen, &mode, &dotClock)) return BadValue; - int payload_len = modecount * ((ver < 2) ? sizeof(xXF86OldVidModeModeInfo) - : sizeof(xXF86VidModeModeInfo)); - - xXF86VidModeGetAllModeLinesReply rep = { - .type = X_Reply, - .length = bytes_to_int32(sizeof(xXF86VidModeGetAllModeLinesReply) - - sizeof(xGenericReply) + payload_len), - .sequenceNumber = client->sequence, - .modecount = modecount - }; - - if (client->swapped) { - swaps(&rep.sequenceNumber); - swapl(&rep.length); - swapl(&rep.modecount); - } - x_rpcbuf_t rpcbuf = { .swapped = client->swapped, .err_clear = TRUE }; - if (!x_rpcbuf_makeroom(&rpcbuf, payload_len)) - return BadAlloc; do { if (ver < 2) @@ -411,9 +392,19 @@ ProcVidModeGetAllModeLines(ClientPtr client) if (rpcbuf.error) return BadAlloc; - if (payload_len != rpcbuf.wpos) - LogMessage(X_WARNING, "XF86VidModeGetAllModelines() payload_len mismatch: %ld but shoud be %d\n", - rpcbuf.wpos, payload_len); + xXF86VidModeGetAllModeLinesReply rep = { + .type = X_Reply, + .length = bytes_to_int32(sizeof(xXF86VidModeGetAllModeLinesReply) - + sizeof(xGenericReply) + rpcbuf.wpos), + .sequenceNumber = client->sequence, + .modecount = modecount + }; + + if (client->swapped) { + swaps(&rep.sequenceNumber); + swapl(&rep.length); + swapl(&rep.modecount); + } WriteToClient(client, sizeof(xXF86VidModeGetAllModeLinesReply), &rep); WriteRpcbufToClient(client, &rpcbuf);