]>
Commit | Line | Data |
---|---|---|
e4d5639d AS |
1 | /* |
2 | * Helpers for getting linearized buffers from iov / filling buffers into iovs | |
3 | * | |
4 | * Copyright (C) 2010 Red Hat, Inc. | |
5 | * | |
6 | * Author(s): | |
7 | * Amit Shah <amit.shah@redhat.com> | |
8 | * | |
9 | * This work is licensed under the terms of the GNU GPL, version 2. See | |
10 | * the COPYING file in the top-level directory. | |
11 | */ | |
12 | ||
13 | #include "qemu-common.h" | |
14 | ||
dcf6f5e1 MT |
15 | /** |
16 | * count and return data size, in bytes, of an iovec | |
17 | * starting at `iov' of `iov_cnt' number of elements. | |
18 | */ | |
19 | size_t iov_size(const struct iovec *iov, const unsigned int iov_cnt); | |
20 | ||
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) | |
31 | */ | |
348e7b8d | 32 | size_t iov_from_buf(struct iovec *iov, unsigned int iov_cnt, |
dcf6f5e1 | 33 | size_t offset, const void *buf, size_t bytes); |
348e7b8d | 34 | size_t iov_to_buf(const struct iovec *iov, const unsigned int iov_cnt, |
dcf6f5e1 MT |
35 | size_t offset, void *buf, size_t bytes); |
36 | ||
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). | |
45 | */ | |
46 | size_t iov_memset(const struct iovec *iov, const unsigned int iov_cnt, | |
47 | size_t offset, int fillc, size_t bytes); | |
48 | ||
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. | |
53 | */ | |
3a1dca94 GH |
54 | void iov_hexdump(const struct iovec *iov, const unsigned int iov_cnt, |
55 | FILE *fp, const char *prefix, size_t limit); |