diff options
author | Jamey Sharp <jamey@minilop.net> | 2006-02-27 12:12:33 -0800 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2006-02-27 12:12:33 -0800 |
commit | c05ae15b661bff6b95deb3abc7f48abe16892ac8 (patch) | |
tree | 4b3028e1280a207caac33846f3195b7f0c759342 /src/xcb_out.c | |
parent | 8f991bdd389f6c419cb18cdaea966304529de165 (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.
Diffstat (limited to 'src/xcb_out.c')
-rw-r--r-- | src/xcb_out.c | 14 |
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; |