mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 03:44:06 +00:00
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:
committed by
Enrico Weigelt
parent
45aa28d4d2
commit
4c4fb5f5f1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user