mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-28 09:59:56 +00:00
randr: ProcRRGetProviders(): use stack for tiny temporary buffer
The reply payload buffer is very small and short-lived, so we can easily use a local dynamic array for that, thus saving an extra heap alloc/free. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
@@ -60,7 +60,6 @@ ProcRRGetProviders (ClientPtr client)
|
||||
ScreenPtr pScreen;
|
||||
rrScrPrivPtr pScrPriv;
|
||||
int rc;
|
||||
CARD8 *extra;
|
||||
unsigned int extraLen;
|
||||
RRProvider *providers;
|
||||
int total_providers = 0, count_providers = 0;
|
||||
@@ -96,6 +95,7 @@ ProcRRGetProviders (ClientPtr client)
|
||||
}
|
||||
|
||||
extraLen = total_providers * sizeof(CARD32);
|
||||
char extra[extraLen];
|
||||
|
||||
xRRGetProvidersReply rep = {
|
||||
.type = X_Reply,
|
||||
@@ -105,13 +105,6 @@ ProcRRGetProviders (ClientPtr client)
|
||||
.length = bytes_to_int32(extraLen),
|
||||
};
|
||||
|
||||
if (extraLen) {
|
||||
extra = malloc(extraLen);
|
||||
if (!extra)
|
||||
return BadAlloc;
|
||||
} else
|
||||
extra = NULL;
|
||||
|
||||
providers = (RRProvider *)extra;
|
||||
ADD_PROVIDER(pScreen);
|
||||
xorg_list_for_each_entry(iter, &pScreen->secondary_list, secondary_head) {
|
||||
@@ -125,11 +118,7 @@ ProcRRGetProviders (ClientPtr client)
|
||||
swaps(&rep.nProviders);
|
||||
}
|
||||
WriteToClient(client, sizeof(xRRGetProvidersReply), (char *)&rep);
|
||||
if (extraLen)
|
||||
{
|
||||
WriteToClient (client, extraLen, (char *) extra);
|
||||
free(extra);
|
||||
}
|
||||
WriteToClient(client, extraLen, extra);
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user