2 * Helpers for getting linearized buffers from iov / filling buffers into iovs
4 * Copyright (C) 2010 Red Hat, Inc.
7 * Amit Shah <amit.shah@redhat.com>
9 * This work is licensed under the terms of the GNU GPL, version 2. See
10 * the COPYING file in the top-level directory.
13 #include "qemu-common.h"
16 * count and return data size, in bytes, of an iovec
17 * starting at `iov' of `iov_cnt' number of elements.
19 size_t iov_size(const struct iovec
*iov
, const unsigned int iov_cnt
);
22 * Copy from single continuous buffer to scatter-gather vector of buffers
23 * (iovec) and back like memcpy() between two continuous memory regions.
24 * Data in single continuous buffer starting at address `buf' and
25 * `bytes' bytes long will be copied to/from an iovec `iov' with
26 * `iov_cnt' number of elements, starting at byte position `offset'
27 * within the iovec. If the iovec does not contain enough space,
28 * only part of data will be copied, up to the end of the iovec.
29 * Number of bytes actually copied will be returned, which is
30 * min(bytes, iov_size(iov)-offset)
32 size_t iov_from_buf(struct iovec
*iov
, unsigned int iov_cnt
,
33 size_t offset
, const void *buf
, size_t bytes
);
34 size_t iov_to_buf(const struct iovec
*iov
, const unsigned int iov_cnt
,
35 size_t offset
, void *buf
, size_t bytes
);
38 * Set data bytes pointed out by iovec `iov' of size `iov_cnt' elements,
39 * starting at byte offset `start', to value `fillc', repeating it
40 * `bytes' number of times.
41 * If `bytes' is large enough, only last bytes portion of iovec,
42 * up to the end of it, will be filled with the specified value.
43 * Function return actual number of bytes processed, which is
44 * min(size, iov_size(iov) - offset).
46 size_t iov_memset(const struct iovec
*iov
, const unsigned int iov_cnt
,
47 size_t offset
, int fillc
, size_t bytes
);
50 * Produce a text hexdump of iovec `iov' with `iov_cnt' number of elements
51 * in file `fp', prefixing each line with `prefix' and processing not more
52 * than `limit' data bytes.
54 void iov_hexdump(const struct iovec
*iov
, const unsigned int iov_cnt
,
55 FILE *fp
, const char *prefix
, size_t limit
);