1/* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include "apr_buckets.h" 18 19APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_split(apr_bucket *a, 20 apr_size_t point) 21{ 22 apr_bucket_refcount *r = a->data; 23 apr_status_t rv; 24 25 if ((rv = apr_bucket_simple_split(a, point)) != APR_SUCCESS) { 26 return rv; 27 } 28 r->refcount++; 29 30 return APR_SUCCESS; 31} 32 33APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_copy(apr_bucket *a, 34 apr_bucket **b) 35{ 36 apr_bucket_refcount *r = a->data; 37 38 apr_bucket_simple_copy(a, b); 39 r->refcount++; 40 41 return APR_SUCCESS; 42} 43 44APU_DECLARE(int) apr_bucket_shared_destroy(void *data) 45{ 46 apr_bucket_refcount *r = data; 47 r->refcount--; 48 return (r->refcount == 0); 49} 50 51APU_DECLARE(apr_bucket *) apr_bucket_shared_make(apr_bucket *b, void *data, 52 apr_off_t start, 53 apr_size_t length) 54{ 55 apr_bucket_refcount *r = data; 56 57 b->data = r; 58 b->start = start; 59 b->length = length; 60 /* caller initializes the type field */ 61 r->refcount = 1; 62 63 return b; 64} 65