バケット(ブリッジではない)の分割には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で切り詰める。参照をずらすだけなのでメモリの操作は発生しない。
最初に見たとき「分割された後ろ側のバケットはどこにいくんだ?」と悩んだけど、たぶんリンクリストに挿入されるから、次のループで取り出せるんだと思う。