From: Jamey Sharp Date: Mon, 27 Feb 2006 20:12:33 +0000 (-0800) Subject: Buffer a couple CARD32s on the stack instead of using an extra iovec. Also a bugfix... X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c05ae15b661bff6b95deb3abc7f48abe16892ac8;p=free-sw%2Fxcb%2Flibxcb 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. --- 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;