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.
8 * Anthony Liguori <aliguori@us.ibm.com>
9 * Amit Shah <amit.shah@redhat.com>
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
;