xkb: XkbSendCompatMap(): little cleanup and simplification

Make it a bit simpler and easier to read.

calloc() and WriteToClient() can handle zero lengths very well.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2024-07-15 21:59:02 +02:00
parent d1555edcc2
commit f3176bae97

View File

@ -2806,18 +2806,16 @@ static int
XkbSendCompatMap(ClientPtr client, XkbSendCompatMap(ClientPtr client,
XkbCompatMapPtr compat, xkbGetCompatMapReply rep) XkbCompatMapPtr compat, xkbGetCompatMapReply rep)
{ {
char *data; int sz = rep.length * sizeof(CARD32);
int size; char *buf = calloc(1, sz);
if (sz && (!buf))
return BadAlloc;
if (rep.length > 0) { if (sz) {
data = calloc(rep.length, 4);
if (data) {
register unsigned i, bit; register unsigned i, bit;
xkbModsWireDesc *grp; xkbModsWireDesc *grp;
XkbSymInterpretPtr sym = &compat->sym_interpret[rep.firstSI]; XkbSymInterpretPtr sym = &compat->sym_interpret[rep.firstSI];
xkbSymInterpretWireDesc *wire = (xkbSymInterpretWireDesc *) data; xkbSymInterpretWireDesc *wire = (xkbSymInterpretWireDesc *) buf;
size = rep.length * 4;
for (i = 0; i < rep.nSI; i++, sym++, wire++) { for (i = 0; i < rep.nSI; i++, sym++, wire++) {
wire->sym = sym->sym; wire->sym = sym->sym;
@ -2847,11 +2845,6 @@ XkbSendCompatMap(ClientPtr client,
wire = (xkbSymInterpretWireDesc *) grp; wire = (xkbSymInterpretWireDesc *) grp;
} }
} }
else
return BadAlloc;
}
else
data = NULL;
if (client->swapped) { if (client->swapped) {
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
@ -2862,10 +2855,8 @@ XkbSendCompatMap(ClientPtr client,
} }
WriteToClient(client, sizeof(xkbGetCompatMapReply), &rep); WriteToClient(client, sizeof(xkbGetCompatMapReply), &rep);
if (data) { WriteToClient(client, sz, buf);
WriteToClient(client, size, data); free(buf);
free((char *) data);
}
return Success; return Success;
} }