summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamey Sharp <jamey@minilop.net>2006-02-27 12:12:33 -0800
committerJamey Sharp <jamey@minilop.net>2006-02-27 12:12:33 -0800
commitc05ae15b661bff6b95deb3abc7f48abe16892ac8 (patch)
tree4b3028e1280a207caac33846f3195b7f0c759342
parent8f991bdd389f6c419cb18cdaea966304529de165 (diff)
Buffer a couple CARD32s on the stack instead of using an extra iovec. Also a bugfix: do not hold a reference to longlen after it goes out of scope.
-rw-r--r--src/xcb_out.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/xcb_out.c b/src/xcb_out.c
index b89af56..42050f5 100644
--- a/src/xcb_out.c
+++ b/src/xcb_out.c
@@ -84,6 +84,7 @@ int XCBSendRequest(XCBConnection *c, unsigned int *request, int flags, struct io
static const char pad[3];
int ret;
int i;
+ CARD32 prefix[2];
struct iovec *padded;
int padlen = 0;
enum workarounds workaround = WORKAROUND_NONE;
@@ -99,7 +100,7 @@ int XCBSendRequest(XCBConnection *c, unsigned int *request, int flags, struct io
#else
malloc
#endif
- ((req->count * 2 + 3) * sizeof(struct iovec));
+ ((req->count * 2 + 2) * sizeof(struct iovec));
if(!(flags & XCB_REQUEST_RAW))
{
@@ -134,14 +135,13 @@ int XCBSendRequest(XCBConnection *c, unsigned int *request, int flags, struct io
((CARD16 *) vector[0].iov_base)[1] = shortlen;
if(!shortlen)
{
- padded[0].iov_base = vector[0].iov_base;
- padded[0].iov_len = sizeof(CARD32);
+ padded[0].iov_base = prefix;
+ padded[0].iov_len = sizeof(prefix);
+ prefix[0] = ((CARD32 *) vector[0].iov_base)[0];
+ prefix[1] = ++longlen;
vector[0].iov_base = ((char *) vector[0].iov_base) + sizeof(CARD32);
vector[0].iov_len -= sizeof(CARD32);
- ++longlen;
- padded[1].iov_base = &longlen;
- padded[1].iov_len = sizeof(CARD32);
- padlen = 2;
+ padlen = 1;
}
}
flags &= ~XCB_REQUEST_RAW;