return APR_SUCCESS;
}
+static void error_destroy(void *data) {
+ ap_bucket_error *h;
+ apr_sms_free(h->sms, h);
+}
+
AP_DECLARE(apr_bucket *) ap_bucket_error_make(apr_bucket *b, int error,
const char *buf, apr_pool_t *p)
{
ap_bucket_error *h;
- h = malloc(sizeof(*h));
- if (h == NULL) {
- return NULL;
- }
+ h = (ap_bucket_error *)apr_sms_malloc(b->sms, sizeof(*h));
h->status = error;
h->data = (buf) ? apr_pstrdup(p, buf) : NULL;
+ h->sms = b->sms;
b->length = 0;
b->start = 0;
AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error,
const char *buf, apr_pool_t *p)
{
- apr_bucket *b = (apr_bucket *)malloc(sizeof(*b));
-
+ apr_sms_t *sms;
+ apr_bucket *b;
+
+ if (!apr_bucket_global_sms) {
+ apr_sms_std_create(&apr_bucket_global_sms);
+ }
+ sms = apr_bucket_global_sms;
+ b = (apr_bucket *)apr_sms_malloc(sms, sizeof(*b));
APR_BUCKET_INIT(b);
- b->free = free;
+ b->sms = sms;
return ap_bucket_error_make(b, error, buf, p);
}
AP_DECLARE_DATA const apr_bucket_type_t ap_bucket_type_error = {
"ERROR", 5,
- free,
+ error_destroy,
error_read,
apr_bucket_setaside_notimpl,
apr_bucket_split_notimpl,