diff --git a/randr/rrproviderproperty.c b/randr/rrproviderproperty.c index 45e9a63e6..23a105c02 100644 --- a/randr/rrproviderproperty.c +++ b/randr/rrproviderproperty.c @@ -685,24 +685,26 @@ 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); + free(extra); + if (stuff->delete && (reply.bytesAfter == 0)) { /* delete the Property */ *prev = prop->next; RRDestroyProviderProperty(prop);