3559899586
Laurent's recent changes mean we use IO vectors much more heavily in the TCP code. In many of those cases, and few others around the code base, individual iovs of these vectors are constructed to exactly cover existing variables or fields. We can make initializing such iovs shorter and clearer with a macro for the purpose. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
34 lines
1 KiB
C
34 lines
1 KiB
C
// 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>
|
|
|
|
#define IOV_OF_LVALUE(lval) \
|
|
(struct iovec){ .iov_base = &(lval), .iov_len = sizeof(lval) }
|
|
|
|
size_t iov_skip_bytes(const struct iovec *iov, size_t n,
|
|
size_t skip, size_t *offset);
|
|
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 */
|