apr_buckets_refcount.c [plain text]
#include "apr_buckets.h"
APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_split(apr_bucket *a,
apr_size_t point)
{
apr_bucket_refcount *r = a->data;
apr_status_t rv;
if ((rv = apr_bucket_simple_split(a, point)) != APR_SUCCESS) {
return rv;
}
r->refcount++;
return APR_SUCCESS;
}
APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_copy(apr_bucket *a,
apr_bucket **b)
{
apr_bucket_refcount *r = a->data;
apr_bucket_simple_copy(a, b);
r->refcount++;
return APR_SUCCESS;
}
APU_DECLARE(int) apr_bucket_shared_destroy(void *data)
{
apr_bucket_refcount *r = data;
r->refcount--;
return (r->refcount == 0);
}
APU_DECLARE(apr_bucket *) apr_bucket_shared_make(apr_bucket *b, void *data,
apr_off_t start,
apr_size_t length)
{
apr_bucket_refcount *r = data;
b->data = r;
b->start = start;
b->length = length;
r->refcount = 1;
return b;
}