17 |
|
|
18 |
|
#include "serf.h" |
19 |
|
#include "serf_bucket_util.h" |
20 |
+ |
#include "serf_private.h" |
21 |
|
|
21 |
– |
|
22 |
|
serf_bucket_t *serf_bucket_create( |
23 |
|
const serf_bucket_type_t *type, |
24 |
|
serf_bucket_alloc_t *allocator, |
155 |
|
return newstr; |
156 |
|
} |
157 |
|
|
158 |
+ |
char *serf_bstrcatv(serf_bucket_alloc_t *allocator, struct iovec *vec, |
159 |
+ |
int vecs, apr_size_t *bytes_written) |
160 |
+ |
{ |
161 |
+ |
int i; |
162 |
+ |
apr_size_t new_len = 0; |
163 |
+ |
char *c, *newstr; |
164 |
+ |
|
165 |
+ |
for (i = 0; i < vecs; i++) { |
166 |
+ |
new_len += vec[i].iov_len; |
167 |
+ |
} |
168 |
+ |
|
169 |
+ |
/* It's up to the caller to free this memory later. */ |
170 |
+ |
newstr = serf_bucket_mem_alloc(allocator, new_len); |
171 |
+ |
|
172 |
+ |
c = newstr; |
173 |
+ |
for (i = 0; i < vecs; i++) { |
174 |
+ |
memcpy(c, vec[i].iov_base, vec[i].iov_len); |
175 |
+ |
c += vec[i].iov_len; |
176 |
+ |
} |
177 |
+ |
|
178 |
+ |
if (bytes_written) { |
179 |
+ |
*bytes_written = c - newstr; |
180 |
+ |
} |
181 |
+ |
|
182 |
+ |
return newstr; |
183 |
+ |
} |
184 |
|
|
185 |
|
/* ==================================================================== */ |
186 |
|
|