From 6091ce6d57546f9dd0af8511f37a20005aeac502 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 3 Apr 2025 15:57:10 +0200 Subject: [PATCH] dix: write out X_GetModifierMapping reply directly No need for using a complex callback machinery, if we just move the little pieces of byte-swapping directly into the request handler. Signed-off-by: Enrico Weigelt, metux IT consult --- dix/devices.c | 12 ++++++++---- dix/swaprep.c | 9 --------- dix/tables.c | 2 +- include/swaprep.h | 5 ----- 4 files changed, 9 insertions(+), 19 deletions(-) diff --git a/dix/devices.c b/dix/devices.c index 1185251c0..94181f15e 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -1793,7 +1793,6 @@ ProcSetModifierMapping(ClientPtr client) int ProcGetModifierMapping(ClientPtr client) { - xGetModifierMappingReply rep; int max_keys_per_mod = 0; KeyCode *modkeymap = NULL; @@ -1802,15 +1801,20 @@ ProcGetModifierMapping(ClientPtr client) generate_modkeymap(client, PickKeyboard(client), &modkeymap, &max_keys_per_mod); - rep = (xGetModifierMappingReply) { + xGetModifierMappingReply rep = { .type = X_Reply, .numKeyPerModifier = max_keys_per_mod, .sequenceNumber = client->sequence, - /* length counts 4 byte quantities - there are 8 modifiers 1 byte big */ + /* length counts 4 byte quantities - there are 8 modifiers 1 byte big */ .length = max_keys_per_mod << 1 }; - WriteReplyToClient(client, sizeof(xGetModifierMappingReply), &rep); + if (client->swapped) { + swaps(&rep.sequenceNumber); + swapl(&rep.length); + } + + WriteToClient(client, sizeof(rep), &rep); WriteToClient(client, max_keys_per_mod * 8, modkeymap); free(modkeymap); diff --git a/dix/swaprep.c b/dix/swaprep.c index cacbf7896..bd725da29 100644 --- a/dix/swaprep.c +++ b/dix/swaprep.c @@ -553,15 +553,6 @@ SGetPointerMappingReply(ClientPtr pClient, int size, WriteToClient(pClient, size, pRep); } -void _X_COLD -SGetModifierMappingReply(ClientPtr pClient, int size, - xGetModifierMappingReply * pRep) -{ - swaps(&pRep->sequenceNumber); - swapl(&pRep->length); - WriteToClient(pClient, size, pRep); -} - void _X_COLD SGetKeyboardControlReply(ClientPtr pClient, int size, xGetKeyboardControlReply * pRep) diff --git a/dix/tables.c b/dix/tables.c index 783dbd109..0bca732cd 100644 --- a/dix/tables.c +++ b/dix/tables.c @@ -834,7 +834,7 @@ ReplySwapPtr ReplySwapVector[256] = { (ReplySwapPtr) SGenericReply, /* SetPointerMapping */ (ReplySwapPtr) SGetPointerMappingReply, ReplyNotSwappd, - (ReplySwapPtr) SGetModifierMappingReply, /* 119 */ + ReplyNotSwappd, /* 119 */ ReplyNotSwappd, /* 120 */ ReplyNotSwappd, /* 121 */ ReplyNotSwappd, /* 122 */ diff --git a/include/swaprep.h b/include/swaprep.h index 4bb248cc3..5d6b2ef23 100644 --- a/include/swaprep.h +++ b/include/swaprep.h @@ -164,11 +164,6 @@ extern void SGetPointerMappingReply(ClientPtr /* pClient */ , xGetPointerMappingReply * /* pRep */ ); -extern void SGetModifierMappingReply(ClientPtr /* pClient */ , - int /* size */ , - xGetModifierMappingReply * - /* pRep */ ); - extern void SGetKeyboardControlReply(ClientPtr /* pClient */ , int /* size */ , xGetKeyboardControlReply *