2 * Helpers for getting linearized buffers from iov / filling buffers into iovs
4 * Copyright IBM, Corp. 2007, 2008
5 * Copyright (C) 2010 Red Hat, Inc.
11 * This work is licensed under the terms of the GNU GPL, version 2. See
12 * the COPYING file in the top-level directory.
17 size_t iov_from_buf(struct iovec *iov, unsigned int iovcnt,
18 const void *buf, size_t size)
24 for (i = 0; offset < size && i < iovcnt; i++) {
27 len = MIN(iov[i].iov_len, size - offset);
29 memcpy(iov[i].iov_base, buf + offset, len);
35 size_t iov_to_buf(const struct iovec *iov, const unsigned int iovcnt,
36 void *buf, size_t offset, size_t size)
39 size_t iov_off, buf_off;
45 for (i = 0; i < iovcnt && size; i++) {
46 if (offset < (iov_off + iov[i].iov_len)) {
47 size_t len = MIN((iov_off + iov[i].iov_len) - offset , size);
49 memcpy(ptr + buf_off, iov[i].iov_base + (offset - iov_off), len);
55 iov_off += iov[i].iov_len;
60 size_t iov_size(const struct iovec *iov, const unsigned int iovcnt)
66 for (i = 0; i < iovcnt; i++) {
67 len += iov[i].iov_len;