change iov_* function prototypes to be more appropriate
[qemu/agraf.git] / iov.h
blob0b4acf4a513a0ae9b5cce72a9432238f472ffb8c
1 /*
2 * Helpers for getting linearized buffers from iov / filling buffers into iovs
4 * Copyright (C) 2010 Red Hat, Inc.
6 * Author(s):
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"
15 /**
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);
21 /**
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);
37 /**
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);
49 /**
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);