util: add spdk_iovmove()
It's the same as spdk_iovcpy(), but the dst/src buffers can overlap. Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com> Change-Id: I6daa0a846d7d1deac2c01d1a1be09171fa8bf796 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15747 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
This commit is contained in:
parent
940be80363
commit
33b12a4411
@ -108,6 +108,13 @@ spdk_divide_round_up(uint64_t num, uint64_t divisor)
|
||||
*/
|
||||
size_t spdk_iovcpy(struct iovec *siov, size_t siovcnt, struct iovec *diov, size_t diovcnt);
|
||||
|
||||
/**
|
||||
* Same as spdk_iovcpy(), but the src/dst buffers might overlap.
|
||||
*
|
||||
* \return The number of bytes copied.
|
||||
*/
|
||||
size_t spdk_iovmove(struct iovec *siov, size_t siovcnt, struct iovec *diov, size_t diovcnt);
|
||||
|
||||
/**
|
||||
* An iovec iterator. Can be allocated on the stack.
|
||||
*/
|
||||
|
@ -104,6 +104,24 @@ spdk_iovcpy(struct iovec *siov, size_t siovcnt, struct iovec *diov, size_t diovc
|
||||
return total_sz;
|
||||
}
|
||||
|
||||
size_t
|
||||
spdk_iovmove(struct iovec *siov, size_t siovcnt, struct iovec *diov, size_t diovcnt)
|
||||
{
|
||||
struct spdk_ioviter iter;
|
||||
size_t len, total_sz;
|
||||
void *src, *dst;
|
||||
|
||||
total_sz = 0;
|
||||
for (len = spdk_ioviter_first(&iter, siov, siovcnt, diov, diovcnt, &src, &dst);
|
||||
len != 0;
|
||||
len = spdk_ioviter_next(&iter, &src, &dst)) {
|
||||
memmove(dst, src, len);
|
||||
total_sz += len;
|
||||
}
|
||||
|
||||
return total_sz;
|
||||
}
|
||||
|
||||
void
|
||||
spdk_copy_iovs_to_buf(void *buf, size_t buf_len, struct iovec *iovs, int iovcnt)
|
||||
{
|
||||
|
@ -131,6 +131,7 @@
|
||||
spdk_u32log2;
|
||||
spdk_u64log2;
|
||||
spdk_iovcpy;
|
||||
spdk_iovmove;
|
||||
spdk_ioviter_first;
|
||||
spdk_ioviter_next;
|
||||
spdk_copy_iovs_to_buf;
|
||||
|
Loading…
Reference in New Issue
Block a user