render: consolidate byte-swapping in ProcRenderCreateRadialGradient()

No need for extra functions and call tables for the few trivial lines.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult
2025-09-08 17:02:40 +02:00
committed by Enrico Weigelt
parent 45aa28d4d2
commit 4c4fb5f5f1

View File

@@ -98,7 +98,6 @@ static int ProcRenderCreateConicalGradient(ClientPtr pClient);
static int ProcRenderDispatch(ClientPtr pClient);
static int SProcRenderCreateRadialGradient(ClientPtr pClient);
static int SProcRenderCreateConicalGradient(ClientPtr pClient);
static int SProcRenderDispatch(ClientPtr pClient);
@@ -177,7 +176,8 @@ int (*SProcRenderVector[RenderNumberRequests]) (ClientPtr) = {
ProcRenderAddTraps,
ProcRenderCreateSolidFill,
ProcRenderCreateLinearGradient,
SProcRenderCreateRadialGradient, SProcRenderCreateConicalGradient};
ProcRenderCreateRadialGradient,
SProcRenderCreateConicalGradient};
int RenderErrBase;
static DevPrivateKeyRec RenderClientPrivateKeyRec;
@@ -1832,7 +1832,8 @@ SingleRenderCreateLinearGradient(ClientPtr client, xRenderCreateLinearGradientRe
}
static int
SingleRenderCreateRadialGradient(ClientPtr client)
SingleRenderCreateRadialGradient(ClientPtr client,
xRenderCreateRadialGradientReq *stuff)
{
PicturePtr pPicture;
int len;
@@ -1840,10 +1841,6 @@ SingleRenderCreateRadialGradient(ClientPtr client)
xFixed *stops;
xRenderColor *colors;
REQUEST(xRenderCreateRadialGradientReq);
REQUEST_AT_LEAST_SIZE(xRenderCreateRadialGradientReq);
LEGAL_NEW_RESOURCE(stuff->pid, client);
len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq);
@@ -1940,34 +1937,6 @@ swapStops(void *stuff, int num)
}
}
static int _X_COLD
SProcRenderCreateRadialGradient(ClientPtr client)
{
int len;
REQUEST(xRenderCreateRadialGradientReq);
REQUEST_AT_LEAST_SIZE(xRenderCreateRadialGradientReq);
swapl(&stuff->pid);
swapl(&stuff->inner.x);
swapl(&stuff->inner.y);
swapl(&stuff->outer.x);
swapl(&stuff->outer.y);
swapl(&stuff->inner_radius);
swapl(&stuff->outer_radius);
swapl(&stuff->nStops);
len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq);
if (stuff->nStops > UINT32_MAX / (sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
if (len != stuff->nStops * (sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
swapStops(stuff + 1, stuff->nStops);
return ProcRenderCreateRadialGradient(client);
}
static int _X_COLD
SProcRenderCreateConicalGradient(ClientPtr client)
{
@@ -2583,14 +2552,12 @@ PanoramiXRenderCreateLinearGradient(ClientPtr client,
}
static int
PanoramiXRenderCreateRadialGradient(ClientPtr client)
PanoramiXRenderCreateRadialGradient(ClientPtr client,
xRenderCreateRadialGradientReq *stuff)
{
REQUEST(xRenderCreateRadialGradientReq);
PanoramiXRes *newPict;
int result = Success;
REQUEST_AT_LEAST_SIZE(xRenderCreateRadialGradientReq);
if (!(newPict = calloc(1, sizeof(PanoramiXRes))))
return BadAlloc;
@@ -2600,7 +2567,7 @@ PanoramiXRenderCreateRadialGradient(ClientPtr client)
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->pid = newPict->info[walkScreenIdx].id;
result = SingleRenderCreateRadialGradient(client);
result = SingleRenderCreateRadialGradient(client, stuff);
if (result != Success)
break;
});
@@ -3094,11 +3061,33 @@ ProcRenderCreateLinearGradient(ClientPtr client)
static int
ProcRenderCreateRadialGradient(ClientPtr client)
{
REQUEST(xRenderCreateRadialGradientReq);
REQUEST_AT_LEAST_SIZE(xRenderCreateRadialGradientReq);
if (client->swapped) {
swapl(&stuff->pid);
swapl(&stuff->inner.x);
swapl(&stuff->inner.y);
swapl(&stuff->outer.x);
swapl(&stuff->outer.y);
swapl(&stuff->inner_radius);
swapl(&stuff->outer_radius);
swapl(&stuff->nStops);
int len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq);
if (stuff->nStops > UINT32_MAX / (sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
if (len != stuff->nStops * (sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
swapStops(stuff + 1, stuff->nStops);
}
#ifdef XINERAMA
return (usePanoramiX ? PanoramiXRenderCreateRadialGradient(client)
: SingleRenderCreateRadialGradient(client));
return (usePanoramiX ? PanoramiXRenderCreateRadialGradient(client, stuff)
: SingleRenderCreateRadialGradient(client, stuff));
#else
return SingleRenderCreateRadialGradient(client);
return SingleRenderCreateRadialGradient(client, stuff);
#endif
}