mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 10:14:52 +00:00
xkb: XkbWriteGeomDoodads(): use x_rpcbuf_t
Use x_rpcbuf_t for reply payload chunk assembly and byte-swapping. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
committed by
Enrico Weigelt
parent
ca27ebbd7d
commit
a2211393df
94
xkb/xkb.c
94
xkb/xkb.c
@@ -4522,59 +4522,53 @@ XkbSizeGeomDoodads(int num_doodads, XkbDoodadPtr doodad)
|
||||
return size;
|
||||
}
|
||||
|
||||
static char *
|
||||
XkbWriteGeomDoodads(char *wire, int num_doodads, XkbDoodadPtr doodad, Bool swap)
|
||||
static void XkbWriteGeomDoodads(x_rpcbuf_t *rpcbuf, int num_doodads, XkbDoodadPtr doodad)
|
||||
{
|
||||
register int i;
|
||||
xkbDoodadWireDesc *doodadWire;
|
||||
|
||||
for (i = 0; i < num_doodads; i++, doodad++) {
|
||||
doodadWire = (xkbDoodadWireDesc *) wire;
|
||||
wire = (char *) &doodadWire[1];
|
||||
memset(doodadWire, 0, SIZEOF(xkbDoodadWireDesc));
|
||||
doodadWire->any.name = doodad->any.name;
|
||||
doodadWire->any.type = doodad->any.type;
|
||||
doodadWire->any.priority = doodad->any.priority;
|
||||
doodadWire->any.top = doodad->any.top;
|
||||
doodadWire->any.left = doodad->any.left;
|
||||
if (swap) {
|
||||
swapl(&doodadWire->any.name);
|
||||
swaps(&doodadWire->any.top);
|
||||
swaps(&doodadWire->any.left);
|
||||
}
|
||||
/* write xkbAnyDoodadWireDesc head part */
|
||||
x_rpcbuf_write_CARD32(rpcbuf, doodad->any.name);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->any.type);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->any.priority);
|
||||
x_rpcbuf_write_INT16(rpcbuf, doodad->any.top);
|
||||
x_rpcbuf_write_INT16(rpcbuf, doodad->any.left);
|
||||
x_rpcbuf_write_INT16(rpcbuf, doodad->any.angle);
|
||||
|
||||
switch (doodad->any.type) {
|
||||
case XkbOutlineDoodad:
|
||||
case XkbSolidDoodad:
|
||||
doodadWire->shape.angle = doodad->shape.angle;
|
||||
doodadWire->shape.colorNdx = doodad->shape.color_ndx;
|
||||
doodadWire->shape.shapeNdx = doodad->shape.shape_ndx;
|
||||
if (swap) {
|
||||
swaps(&doodadWire->shape.angle);
|
||||
}
|
||||
/* write xkbShapeDoodadWireDesc head part */
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->shape.color_ndx);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->shape.shape_ndx);
|
||||
x_rpcbuf_write_CARD16(rpcbuf, 0); /* pad1 */
|
||||
x_rpcbuf_write_CARD32(rpcbuf, 0); /* pad2 */
|
||||
break;
|
||||
case XkbTextDoodad:
|
||||
doodadWire->text.angle = doodad->text.angle;
|
||||
doodadWire->text.width = doodad->text.width;
|
||||
doodadWire->text.height = doodad->text.height;
|
||||
doodadWire->text.colorNdx = doodad->text.color_ndx;
|
||||
if (swap) {
|
||||
swaps(&doodadWire->text.angle);
|
||||
swaps(&doodadWire->text.width);
|
||||
swaps(&doodadWire->text.height);
|
||||
}
|
||||
wire = XkbWriteCountedString(wire, doodad->text.text, swap);
|
||||
wire = XkbWriteCountedString(wire, doodad->text.font, swap);
|
||||
/* write xkbTextDoodadWireDesc head part */
|
||||
x_rpcbuf_write_CARD16(rpcbuf, doodad->text.width);
|
||||
x_rpcbuf_write_CARD16(rpcbuf, doodad->text.height);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->text.color_ndx);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, 0); /* pad1 */
|
||||
x_rpcbuf_write_CARD16(rpcbuf, 0); /* pad2 */
|
||||
x_rpcbuf_write_counted_string_pad(rpcbuf, doodad->text.text);
|
||||
x_rpcbuf_write_counted_string_pad(rpcbuf, doodad->text.font);
|
||||
break;
|
||||
case XkbIndicatorDoodad:
|
||||
doodadWire->indicator.shapeNdx = doodad->indicator.shape_ndx;
|
||||
doodadWire->indicator.onColorNdx = doodad->indicator.on_color_ndx;
|
||||
doodadWire->indicator.offColorNdx = doodad->indicator.off_color_ndx;
|
||||
/* write xkbIndicatorDoodadWireDesc head part */
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->indicator.shape_ndx);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->indicator.on_color_ndx);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->indicator.off_color_ndx);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, 0); /* pad1 */
|
||||
x_rpcbuf_write_CARD32(rpcbuf, 0); /* pad2 */
|
||||
break;
|
||||
case XkbLogoDoodad:
|
||||
doodadWire->logo.angle = doodad->logo.angle;
|
||||
doodadWire->logo.colorNdx = doodad->logo.color_ndx;
|
||||
doodadWire->logo.shapeNdx = doodad->logo.shape_ndx;
|
||||
wire = XkbWriteCountedString(wire, doodad->logo.logo_name, swap);
|
||||
/* write xkbLogoDoodadWireDesc head part */
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->logo.color_ndx);
|
||||
x_rpcbuf_write_CARD8(rpcbuf, doodad->logo.shape_ndx);
|
||||
x_rpcbuf_write_CARD16(rpcbuf, 0); /* pad1 */
|
||||
x_rpcbuf_write_CARD32(rpcbuf, 0); /* pad2 */
|
||||
x_rpcbuf_write_counted_string_pad(rpcbuf, doodad->logo.logo_name);
|
||||
break;
|
||||
default:
|
||||
ErrorF("[xkb] Unknown doodad type %d in XkbWriteGeomDoodads\n",
|
||||
@@ -4583,7 +4577,6 @@ XkbWriteGeomDoodads(char *wire, int num_doodads, XkbDoodadPtr doodad, Bool swap)
|
||||
break;
|
||||
}
|
||||
}
|
||||
return wire;
|
||||
}
|
||||
|
||||
static void XkbWriteGeomOverlay(x_rpcbuf_t *rpcbuf, XkbOverlayPtr ol)
|
||||
@@ -4721,10 +4714,13 @@ XkbWriteGeomSections(char *wire, XkbGeometryPtr geom, Bool swap)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (section->doodads) {
|
||||
wire = XkbWriteGeomDoodads(wire,
|
||||
section->num_doodads, section->doodads,
|
||||
swap);
|
||||
x_rpcbuf_t rpcbuf = { .swapped = swap, .err_clear = TRUE };
|
||||
XkbWriteGeomDoodads(&rpcbuf, section->num_doodads, section->doodads);
|
||||
memcpy(wire, rpcbuf.buffer, rpcbuf.wpos);
|
||||
wire += rpcbuf.wpos;
|
||||
x_rpcbuf_clear(&rpcbuf);
|
||||
}
|
||||
if (section->overlays) {
|
||||
x_rpcbuf_t rpcbuf = { .swapped = swap, .err_clear = TRUE };
|
||||
@@ -4800,9 +4796,13 @@ XkbAssembleGeometry(ClientPtr client,
|
||||
desc = XkbWriteGeomShapes(desc, geom, client->swapped);
|
||||
if (rep.nSections > 0)
|
||||
desc = XkbWriteGeomSections(desc, geom, client->swapped);
|
||||
if (rep.nDoodads > 0)
|
||||
desc = XkbWriteGeomDoodads(desc, geom->num_doodads, geom->doodads,
|
||||
client->swapped);
|
||||
if (rep.nDoodads > 0) {
|
||||
x_rpcbuf_t rpcbuf = { .swapped = client->swapped, .err_clear = TRUE };
|
||||
XkbWriteGeomDoodads(&rpcbuf, geom->num_doodads, geom->doodads);
|
||||
memcpy(desc, rpcbuf.buffer, rpcbuf.wpos);
|
||||
desc += rpcbuf.wpos;
|
||||
x_rpcbuf_clear(&rpcbuf);
|
||||
}
|
||||
if (rep.nKeyAliases > 0)
|
||||
desc = XkbWriteGeomKeyAliases(desc, geom, client->swapped);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user