From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:50490) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QozZX-0004iX-On for qemu-devel@nongnu.org; Thu, 04 Aug 2011 11:11:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QozZC-0007qD-GB for qemu-devel@nongnu.org; Thu, 04 Aug 2011 11:10:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:28981) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QozZC-0007pv-2w for qemu-devel@nongnu.org; Thu, 04 Aug 2011 11:10:34 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p74FAUS7007829 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 4 Aug 2011 11:10:30 -0400 From: Gerd Hoffmann Date: Thu, 4 Aug 2011 17:10:13 +0200 Message-Id: <1312470626-25872-4-git-send-email-kraxel@redhat.com> In-Reply-To: <1312470626-25872-1-git-send-email-kraxel@redhat.com> References: <1312470626-25872-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 03/16] Add iov_clear() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann Fill the spefified area with zeros. Signed-off-by: Gerd Hoffmann --- iov.c | 23 +++++++++++++++++++++++ iov.h | 2 ++ 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/iov.c b/iov.c index 60553c7..e7385c4 100644 --- a/iov.c +++ b/iov.c @@ -62,6 +62,29 @@ size_t iov_to_buf(const struct iovec *iov, const unsigned int iov_cnt, return buf_off; } +size_t iov_clear(const struct iovec *iov, const unsigned int iov_cnt, + size_t iov_off, size_t size) +{ + size_t iovec_off, buf_off; + unsigned int i; + + iovec_off = 0; + buf_off = 0; + for (i = 0; i < iov_cnt && size; i++) { + if (iov_off < (iovec_off + iov[i].iov_len)) { + size_t len = MIN((iovec_off + iov[i].iov_len) - iov_off , size); + + memset(iov[i].iov_base + (iov_off - iovec_off), 0, len); + + buf_off += len; + iov_off += len; + size -= len; + } + iovec_off += iov[i].iov_len; + } + return buf_off; +} + size_t iov_size(const struct iovec *iov, const unsigned int iov_cnt) { size_t len; diff --git a/iov.h b/iov.h index c2c5b39..94d2f78 100644 --- a/iov.h +++ b/iov.h @@ -17,5 +17,7 @@ size_t iov_from_buf(struct iovec *iov, unsigned int iov_cnt, size_t iov_to_buf(const struct iovec *iov, const unsigned int iov_cnt, void *buf, size_t iov_off, size_t size); size_t iov_size(const struct iovec *iov, const unsigned int iov_cnt); +size_t iov_clear(const struct iovec *iov, const unsigned int iov_cnt, + size_t iov_off, size_t size); void iov_hexdump(const struct iovec *iov, const unsigned int iov_cnt, FILE *fp, const char *prefix, size_t limit); -- 1.7.1