X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=cutils.c;h=f9a7e3689e04605beebabef940f280e1a8fca572;hb=4a81ab81e4d947a3a0c8408c743ad94e7c1b8a30;hp=8d562b28ab0d5fb71c0fa88a44cdcdcd623af2b2;hpb=9363ee31ab53fc0fd39fbe5936d9c00a2f4e54a4;p=qemu.git diff --git a/cutils.c b/cutils.c index 8d562b28a..f9a7e3689 100644 --- a/cutils.c +++ b/cutils.c @@ -267,6 +267,37 @@ void qemu_iovec_memset(QEMUIOVector *qiov, int c, size_t count) } } +void qemu_iovec_memset_skip(QEMUIOVector *qiov, int c, size_t count, + size_t skip) +{ + int i; + size_t done; + void *iov_base; + uint64_t iov_len; + + done = 0; + for (i = 0; (i < qiov->niov) && (done != count); i++) { + if (skip >= qiov->iov[i].iov_len) { + /* Skip the whole iov */ + skip -= qiov->iov[i].iov_len; + continue; + } else { + /* Skip only part (or nothing) of the iov */ + iov_base = (uint8_t*) qiov->iov[i].iov_base + skip; + iov_len = qiov->iov[i].iov_len - skip; + skip = 0; + } + + if (done + iov_len > count) { + memset(iov_base, c, count - done); + break; + } else { + memset(iov_base, c, iov_len); + } + done += iov_len; + } +} + #ifndef _WIN32 /* Sets a specific flag */ int fcntl_setfl(int fd, int flag)