From c05ae15b661bff6b95deb3abc7f48abe16892ac8 Mon Sep 17 00:00:00 2001 From: Jamey Sharp Date: Mon, 27 Feb 2006 12:12:33 -0800 Subject: 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. --- src/xcb_out.c | 14 +++++++------- 1 file 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; -- cgit v1.2.3