From 92b10cbccdeef3896f45dc340eb7779c78577ede Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Fri, 11 Jul 2014 23:20:08 -0400 Subject: journal-remote: avoid copying input data Instead of copying fields into new memory allocations, simply keep pointers into the receive buffer. Data in this buffer is only copied when there is not enough space for new data and a large chunk of the buffer contains old data. --- src/journal-remote/journal-remote-write.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/journal-remote/journal-remote-write.c') diff --git a/src/journal-remote/journal-remote-write.c b/src/journal-remote/journal-remote-write.c index cdd06f9eff..bec4cb1f7b 100644 --- a/src/journal-remote/journal-remote-write.c +++ b/src/journal-remote/journal-remote-write.c @@ -31,8 +31,6 @@ int iovw_put(struct iovec_wrapper *iovw, void* data, size_t len) { } void iovw_free_contents(struct iovec_wrapper *iovw) { - for (size_t j = 0; j < iovw->count; j++) - free(iovw->iovec[j].iov_base); free(iovw->iovec); iovw->iovec = NULL; iovw->size_bytes = iovw->count = 0; @@ -41,12 +39,19 @@ void iovw_free_contents(struct iovec_wrapper *iovw) { size_t iovw_size(struct iovec_wrapper *iovw) { size_t n = 0, i; - for(i = 0; i < iovw->count; i++) + for (i = 0; i < iovw->count; i++) n += iovw->iovec[i].iov_len; return n; } +void iovw_rebase(struct iovec_wrapper *iovw, char *old, char *new) { + size_t i; + + for (i = 0; i < iovw->count; i++) + iovw->iovec[i].iov_base = (char*) iovw->iovec[i].iov_base - old + new; +} + /********************************************************************** ********************************************************************** **********************************************************************/ -- cgit v1.2.3-54-g00ecf