バケット(ブリッジではない)の分割にはapr_bucket_split(e)を使う。
apr_bucket_split(a)の実体(のひとつ?)。
APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_split(apr_bucket *a,
apr_size_t point)
{
apr_bucket *b;
if (point > a->length) {
return APR_EINVAL;
}
apr_bucket_simple_copy(a, &b);
a->length = point;
b->length -= point;
b->start += point;
APR_BUCKET_INSERT_AFTER(a, b);
return APR_SUCCESS;
}
バケットaを長さpointで切り詰める。参照をずらすだけなのでメモリの操作は発生しない。
最初に見たとき「分割された後ろ側のバケットはどこにいくんだ?」と悩んだけど、たぶんリンクリストに挿入されるから、次のループで取り出せるんだと思う。