diff --git a/randr/rrproviderproperty.c b/randr/rrproviderproperty.c index 45e9a63e65..fc78a0c7cb 100644 --- a/randr/rrproviderproperty.c +++ b/randr/rrproviderproperty.c @@ -685,24 +685,25 @@ ProcRRGetProviderProperty(ClientPtr client) swapl(&reply.bytesAfter); swapl(&reply.nItems); } - WriteToClient(client, sizeof(xGenericReply), &reply); if (len) { memcpy(extra, (char *) prop_value->data + ind, len); switch (reply.format) { case 32: - client->pSwapReplyFunc = (ReplySwapPtr) CopySwap32Write; + if (client->swapped) SwapLongs((CARD32*) extra, len/sizeof(CARD32)); break; case 16: - client->pSwapReplyFunc = (ReplySwapPtr) CopySwap16Write; + if (client->swapped) SwapShorts((short*) extra, len/sizeof(CARD16)); break; default: - client->pSwapReplyFunc = (ReplySwapPtr) WriteToClient; break; } - WriteSwappedDataToClient(client, len, extra); - free(extra); } + WriteToClient(client, sizeof(xGenericReply), &reply); + WriteToClient(client, len, extra); + + if (extra) free(extra); + if (stuff->delete && (reply.bytesAfter == 0)) { /* delete the Property */ *prev = prop->next; RRDestroyProviderProperty(prop);