}
static
-apr_status_t ap_proxygetline(char *s, int n, request_rec *r,
+apr_status_t ap_proxygetline(apr_bucket_brigade *bb, char *s, int n, request_rec *r,
int fold, int *writen)
{
char *tmp_s = s;
apr_status_t rv;
apr_size_t len;
- apr_bucket_brigade *tmp_bb;
- tmp_bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- rv = ap_rgetline(&tmp_s, n, &len, r, fold, tmp_bb);
- apr_brigade_destroy(tmp_bb);
+ rv = ap_rgetline(&tmp_s, n, &len, r, fold, bb);
+ apr_brigade_cleanup(bb);
if (rv == APR_SUCCESS) {
*writen = (int) len;
+ } else if (rv == APR_ENOSPC) {
+ *writen = n;
} else {
*writen = -1;
}
char keepchar;
request_rec *rp;
apr_bucket *e;
- apr_bucket_brigade *bb;
+ apr_bucket_brigade *bb, *tmp_bb;
int len, backasswards;
int interim_response; /* non-zero whilst interim 1xx responses
* are being read. */
* response.
*/
rp->proxyreq = PROXYREQ_RESPONSE;
+ tmp_bb = apr_brigade_create(p, c->bucket_alloc);
do {
apr_status_t rc;
apr_brigade_cleanup(bb);
- rc = ap_proxygetline(buffer, sizeof(buffer), rp, 0, &len);
+ rc = ap_proxygetline(tmp_bb, buffer, sizeof(buffer), rp, 0, &len);
if (len == 0) {
/* handle one potential stray CRLF */
- rc = ap_proxygetline(buffer, sizeof(buffer), rp, 0, &len);
+ rc = ap_proxygetline(tmp_bb, buffer, sizeof(buffer), rp, 0, &len);
}
if (len <= 0) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, r,