in modules/fcgid/fcgid_bucket.c [23:56]
static apr_status_t fcgid_feed_data(fcgid_bucket_ctx * ctx,
apr_bucket_alloc_t * bucketalloc,
char **buffer, apr_size_t * bufferlen)
{
apr_status_t rv;
if (!ctx->buffer) {
*buffer = apr_bucket_alloc(FCGID_FEED_LEN, bucketalloc);
*bufferlen = FCGID_FEED_LEN;
if ((rv =
proc_read_ipc(&ctx->ipc, *buffer,
bufferlen)) != APR_SUCCESS) {
ctx->has_error = 1;
apr_bucket_free(*buffer);
return rv;
}
ctx->buffer =
apr_bucket_heap_create(*buffer, FCGID_FEED_LEN,
apr_bucket_free, bucketalloc);
if (*bufferlen != FCGID_FEED_LEN) {
apr_bucket *buckettmp;
apr_bucket_split(ctx->buffer, *bufferlen);
buckettmp = APR_BUCKET_NEXT(ctx->buffer);
apr_bucket_delete(buckettmp);
}
} else {
apr_bucket_read(ctx->buffer, (const char **) buffer, bufferlen,
APR_BLOCK_READ);
}
return APR_SUCCESS;
}