diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2014-07-11 23:20:08 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2014-07-15 22:34:42 -0400 |
commit | 92b10cbccdeef3896f45dc340eb7779c78577ede (patch) | |
tree | 2d608289582584f30aa27f0b3079457fb2ce326e /src/journal-remote/journal-remote-write.c | |
parent | 874bc134ac6504c45e94174e37af13ff21a6bfe2 (diff) |
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.
Diffstat (limited to 'src/journal-remote/journal-remote-write.c')
-rw-r--r-- | src/journal-remote/journal-remote-write.c | 11 |
1 files changed, 8 insertions, 3 deletions
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; +} + /********************************************************************** ********************************************************************** **********************************************************************/ |