1251876Speter/* Licensed to the Apache Software Foundation (ASF) under one or more 2251876Speter * contributor license agreements. See the NOTICE file distributed with 3251876Speter * this work for additional information regarding copyright ownership. 4251876Speter * The ASF licenses this file to You under the Apache License, Version 2.0 5251876Speter * (the "License"); you may not use this file except in compliance with 6251876Speter * the License. You may obtain a copy of the License at 7251876Speter * 8251876Speter * http://www.apache.org/licenses/LICENSE-2.0 9251876Speter * 10251876Speter * Unless required by applicable law or agreed to in writing, software 11251876Speter * distributed under the License is distributed on an "AS IS" BASIS, 12251876Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13251876Speter * See the License for the specific language governing permissions and 14251876Speter * limitations under the License. 15251876Speter */ 16251876Speter 17251876Speter#include "apr_buckets.h" 18251876Speter 19251876SpeterAPU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_split(apr_bucket *a, 20251876Speter apr_size_t point) 21251876Speter{ 22251876Speter apr_bucket_refcount *r = a->data; 23251876Speter apr_status_t rv; 24251876Speter 25251876Speter if ((rv = apr_bucket_simple_split(a, point)) != APR_SUCCESS) { 26251876Speter return rv; 27251876Speter } 28251876Speter r->refcount++; 29251876Speter 30251876Speter return APR_SUCCESS; 31251876Speter} 32251876Speter 33251876SpeterAPU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_copy(apr_bucket *a, 34251876Speter apr_bucket **b) 35251876Speter{ 36251876Speter apr_bucket_refcount *r = a->data; 37251876Speter 38251876Speter apr_bucket_simple_copy(a, b); 39251876Speter r->refcount++; 40251876Speter 41251876Speter return APR_SUCCESS; 42251876Speter} 43251876Speter 44251876SpeterAPU_DECLARE(int) apr_bucket_shared_destroy(void *data) 45251876Speter{ 46251876Speter apr_bucket_refcount *r = data; 47251876Speter r->refcount--; 48251876Speter return (r->refcount == 0); 49251876Speter} 50251876Speter 51251876SpeterAPU_DECLARE(apr_bucket *) apr_bucket_shared_make(apr_bucket *b, void *data, 52251876Speter apr_off_t start, 53251876Speter apr_size_t length) 54251876Speter{ 55251876Speter apr_bucket_refcount *r = data; 56251876Speter 57251876Speter b->data = r; 58251876Speter b->start = start; 59251876Speter b->length = length; 60251876Speter /* caller initializes the type field */ 61251876Speter r->refcount = 1; 62251876Speter 63251876Speter return b; 64251876Speter} 65