On Wed, 28 Feb 2024 12:52:01 +1100 David Gibson <david(a)gibson.dropbear.id.au> wrote:Several of the IOV functions in iov.c, and also tap_send_frames_passt() needs to determine which buffer element a byte offset into an IO vector lies in. Split this out into a helper function iov_skip_bytes(). Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au> --- iov.c | 42 +++++++++++++++++++++++++++++++++--------- iov.h | 2 ++ tap.c | 12 +++++------- 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/iov.c b/iov.c index 8a48acb1..e3312628 100644 --- a/iov.c +++ b/iov.c @@ -25,6 +25,36 @@ #include "util.h" #include "iov.h" + +/* iov_skip_bytes() - Skip the first n bytes into an IO vector + * @iov: IO vector + * @n: Number of entries in @iov...which is a different 'n' compared to two lines above.+ * @vec_offset: Total byte offset into the IO vectorThis doesn't clearly correlate with the description of the function ("first n bytes"). Same here, I have no other comments about the series, so I'll apply this and try to improve this a bit as a follow-up.+ * @buf_offset: Offset into a single buffer of the IO vector + * + * Return: index I of individual struct iovec which contains the byte at + * @vec_offset bytes into the vector (as though all its buffers were + * contiguous). If @buf_offset is non-NULL, update it to the offset of + * that byte within @iov[I] (guaranteed to be less than @iov[I].iov_len) + * If the whole vector has <= @vec_offset bytes, return @n. + */ +size_t iov_skip_bytes(const struct iovec *iov, size_t n, + size_t vec_offset, size_t *buf_offset)-- Stefano