From 67546178f5d3421ab04f30e0cd0e4a6f1af040f5 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 21 Sep 2024 17:07:29 -0300 Subject: [PATCH] iovec: iovec_iterator_total_offset --- kernel-src/include/kernel/iovec.h | 3 +++ kernel-src/io/iovec.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/kernel-src/include/kernel/iovec.h b/kernel-src/include/kernel/iovec.h index 207fd312..b47ff1d8 100644 --- a/kernel-src/include/kernel/iovec.h +++ b/kernel-src/include/kernel/iovec.h @@ -36,6 +36,9 @@ size_t iovec_iterator_skip(iovec_iterator_t *iovec_iterator, size_t skip_count); // sets the current offset of the iovec iterator to offset, returns the remaining number of bytes size_t iovec_iterator_set(iovec_iterator_t *iovec_iterator, size_t offset); +// returns the offset that the iovec_iterator is on +size_t iovec_iterator_total_offset(iovec_iterator_t *iovec_iterator); + // copies byte_count bytes from the iovec_iterator into buffer // NOTE: the iovec can have userspace addresses. in this case, the copy can possibly fail with EFAULT int iovec_iterator_copy_to_buffer(iovec_iterator_t *iovec_iterator, void *buffer, size_t byte_count); diff --git a/kernel-src/io/iovec.c b/kernel-src/io/iovec.c index 9a1a4d4d..7e1414a6 100644 --- a/kernel-src/io/iovec.c +++ b/kernel-src/io/iovec.c @@ -67,6 +67,10 @@ size_t iovec_iterator_set(iovec_iterator_t *iovec_iterator, size_t offset) { return iovec_iterator_skip(iovec_iterator, offset); } +size_t iovec_iterator_total_offset(iovec_iterator_t *iovec_iterator) { + return iovec_iterator->total_offset; +} + int iovec_iterator_copy_to_buffer(iovec_iterator_t *iovec_iterator, void *buffer, size_t byte_count) { size_t iterator_offset_save = iovec_iterator->total_offset; size_t remaining_total = min(byte_count, iovec_iterator->total_size - iovec_iterator->total_offset);