summaryrefslogtreecommitdiffstats
path: root/contrib/serf/buckets/buckets.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/serf/buckets/buckets.c')
-rw-r--r--contrib/serf/buckets/buckets.c28
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;
+}
/* ==================================================================== */
OpenPOWER on IntegriCloud