- assert(!c->out.vec_len);
- assert(!c->out.vec);
- c->out.vec = malloc(sizeof(struct iovec) * (1 + count * 2));
- if(!c->out.vec)
- return -1;
- if(c->out.queue_len)
- {
- c->out.vec[c->out.vec_len].iov_base = c->out.queue;
- c->out.vec[c->out.vec_len++].iov_len = c->out.queue_len;
- c->out.queue_len = 0;
- }
- for(i = 0; i < count; ++i)
- {
- if(!vector[i].iov_len)
- continue;
- c->out.vec[c->out.vec_len].iov_base = vector[i].iov_base;
- c->out.vec[c->out.vec_len++].iov_len = vector[i].iov_len;
- if(!XCB_PAD(vector[i].iov_len))
- continue;
- c->out.vec[c->out.vec_len].iov_base = (void *) pad;
- c->out.vec[c->out.vec_len++].iov_len = XCB_PAD(vector[i].iov_len);
- }
- if(_xcb_out_flush(c) <= 0)
- len = -1;
- free(c->out.vec);
- c->out.vec = 0;