- *(char*)&wb->uints[i] = value;
- wb->iovec[i].iov_base = &wb->uints[i];
- wb->iovec[i].iov_len = 1;
- wb->count = i + 1;
+
+ /* get where to store */
+ p = &wb->buf[n];
+ if (i && p == (((char*)wb->iovec[i - 1].iov_base) + wb->iovec[i - 1].iov_len))
+ /* increase previous iovec */
+ wb->iovec[i - 1].iov_len += (size_t)length;
+ else if (i == WRITEBUF_COUNT_MAX)
+ /* no more iovec */
+ return 0;
+ else {
+ /* new iovec */
+ wb->iovec[i].iov_base = p;
+ wb->iovec[i].iov_len = (size_t)length;
+ wb->iovcount = i + 1;
+ }
+ /* store now */
+ memcpy(p, value, (size_t)length);
+ wb->bufcount = nafter;