diff options
author | Laurent Vivier <lvivier@redhat.com> | 2024-02-28 12:52:00 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-02-29 06:23:49 +0100 |
commit | 2a6f8bcca77ae7391a8943a3791be2fbb98a918b (patch) | |
tree | 9bcead16830db4d915f1cdb16556e3e7801211bd /iov.h | |
parent | 90f1d3b3546eba0e454d227c24b391e184ac092c (diff) | |
download | passt-2a6f8bcca77ae7391a8943a3791be2fbb98a918b.tar passt-2a6f8bcca77ae7391a8943a3791be2fbb98a918b.tar.gz passt-2a6f8bcca77ae7391a8943a3791be2fbb98a918b.tar.bz2 passt-2a6f8bcca77ae7391a8943a3791be2fbb98a918b.tar.lz passt-2a6f8bcca77ae7391a8943a3791be2fbb98a918b.tar.xz passt-2a6f8bcca77ae7391a8943a3791be2fbb98a918b.tar.zst passt-2a6f8bcca77ae7391a8943a3791be2fbb98a918b.zip |
iov: add some functions to manage iovec
Introduce functions to copy to/from a buffer from/to an iovec array,
to compute data length in in bytes of an iovec and to copy memory from
an iovec to another.
iov_from_buf(), iov_to_buf(), iov_size(), iov_copy().
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Message-ID: <20240217150725.661467-2-lvivier@redhat.com>
[dwg: Small changes to suppress cppcheck warnings]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'iov.h')
-rw-r--r-- | iov.h | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * iov.c - helpers for using (partial) iovecs. + * + * Copyrigh Red Hat + * Author: Laurent Vivier <lvivier@redhat.com> + * + * This file also contains code originally from QEMU include/qemu/iov.h: + * + * Author(s): + * Amit Shah <amit.shah@redhat.com> + * Michael Tokarev <mjt@tls.msk.ru> + */ + +#ifndef IOVEC_H +#define IOVEC_H + +#include <unistd.h> +#include <string.h> + +size_t iov_from_buf(const struct iovec *iov, size_t iov_cnt, + size_t offset, const void *buf, size_t bytes); +size_t iov_to_buf(const struct iovec *iov, size_t iov_cnt, + size_t offset, void *buf, size_t bytes); +size_t iov_size(const struct iovec *iov, size_t iov_cnt); +unsigned iov_copy(struct iovec *dst_iov, size_t dst_iov_cnt, + const struct iovec *iov, size_t iov_cnt, + size_t offset, size_t bytes); +#endif /* IOVEC_H */ |