diff options
Diffstat (limited to 'contrib/serf/buckets/buckets.c')
-rw-r--r-- | contrib/serf/buckets/buckets.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/contrib/serf/buckets/buckets.c b/contrib/serf/buckets/buckets.c index 72b3913..88e256b 100644 --- a/contrib/serf/buckets/buckets.c +++ b/contrib/serf/buckets/buckets.c @@ -17,7 +17,7 @@ #include "serf.h" #include "serf_bucket_util.h" - +#include "serf_private.h" serf_bucket_t *serf_bucket_create( const serf_bucket_type_t *type, @@ -155,6 +155,32 @@ char *serf_bstrdup(serf_bucket_alloc_t *allocator, return newstr; } +char *serf_bstrcatv(serf_bucket_alloc_t *allocator, struct iovec *vec, + int vecs, apr_size_t *bytes_written) +{ + int i; + apr_size_t new_len = 0; + char *c, *newstr; + + for (i = 0; i < vecs; i++) { + new_len += vec[i].iov_len; + } + + /* It's up to the caller to free this memory later. */ + newstr = serf_bucket_mem_alloc(allocator, new_len); + + c = newstr; + for (i = 0; i < vecs; i++) { + memcpy(c, vec[i].iov_base, vec[i].iov_len); + c += vec[i].iov_len; + } + + if (bytes_written) { + *bytes_written = c - newstr; + } + + return newstr; +} /* ==================================================================== */ |