diff options
author | Jamey Sharp <jamey@minilop.net> | 2006-03-02 23:39:38 -0800 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2006-03-02 23:39:38 -0800 |
commit | 622b599c8fcf5d677f76ca03f3241a23dba58712 (patch) | |
tree | c649c9dc5490e7b22e27aaf82f49afeb8e6999c6 /src/xcb_out.c | |
parent | 87905f0579e749ac6d92843780af246160318eca (diff) |
Tweak to previous API change: Require that spare iovecs fall before vector[0]. Leave vector in well-defined state.
Diffstat (limited to 'src/xcb_out.c')
-rw-r--r-- | src/xcb_out.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/xcb_out.c b/src/xcb_out.c index 78ec8ca..b201565 100644 --- a/src/xcb_out.c +++ b/src/xcb_out.c @@ -126,8 +126,7 @@ int XCBSendRequest(XCBConnection *c, unsigned int *request, int flags, struct io ((CARD16 *) vector[0].iov_base)[1] = shortlen; if(!shortlen) { - memmove(vector + 1, vector, veclen++ * sizeof(*vector)); - ++veclen; + --vector, ++veclen; vector[0].iov_base = prefix; vector[0].iov_len = sizeof(prefix); prefix[0] = ((CARD32 *) vector[0].iov_base)[0]; @@ -237,12 +236,14 @@ int _xcb_out_write_block(XCBConnection *c, struct iovec *vector, size_t count) { memcpy(c->out.queue + c->out.queue_len, vector[0].iov_base, vector[0].iov_len); c->out.queue_len += vector[0].iov_len; + vector[0].iov_base = (char *) vector[0].iov_base + vector[0].iov_len; + vector[0].iov_len = 0; ++vector, --count; } if(!count) return 1; - memmove(vector + 1, vector, count++ * sizeof(struct iovec)); + --vector, ++count; vector[0].iov_base = c->out.queue; vector[0].iov_len = c->out.queue_len; c->out.queue_len = 0; |