From: Brian Pane Date: Sun, 22 Sep 2002 00:05:08 +0000 (+0000) Subject: Switch the most frequent apr_brigade_write() and apr_brigade_puts() X-Git-Tag: WROWE_2_0_43_PRE1~57 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=09ce7e3904fe7f7277d3c8e0f3b8a93c2a35c288;p=apache Switch the most frequent apr_brigade_write() and apr_brigade_puts() calls to apr_brigade_writev() for improved efficiency git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@96946 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index 2d5378c3b2..677d60def5 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -1133,11 +1133,21 @@ static int form_header_field(header_struct *h, ap_xlate_proto_to_ascii(headfield, len); apr_brigade_write(h->bb, NULL, NULL, headfield, len); #else - apr_brigade_puts(h->bb, NULL, NULL, fieldname); - apr_brigade_write(h->bb, NULL, NULL, ": ", sizeof(": ") - 1); - apr_brigade_puts(h->bb, NULL, NULL, fieldval); - apr_brigade_write(h->bb, NULL, NULL, CRLF, sizeof(CRLF) - 1); -#endif /* APR_CHARSET_EBCDIC */ + struct iovec vec[4]; + struct iovec *v = vec; + v->iov_base = (void *)fieldname; + v->iov_len = strlen(fieldname); + v++; + v->iov_base = ": "; + v->iov_len = sizeof(": ") - 1; + v++; + v->iov_base = (void *)fieldval; + v->iov_len = strlen(fieldval); + v++; + v->iov_base = CRLF; + v->iov_len = sizeof(CRLF) - 1; + apr_brigade_writev(h->bb, NULL, NULL, vec, 4); +#endif /* !APR_CHARSET_EBCDIC */ return 1; } @@ -1183,10 +1193,8 @@ static void basic_http_header(request_rec *r, apr_bucket_brigade *bb, const char *protocol) { char *date; - char *tmp; const char *server; header_struct h; - apr_size_t len; struct iovec vec[4]; if (r->assbackwards) { @@ -1204,9 +1212,17 @@ static void basic_http_header(request_rec *r, apr_bucket_brigade *bb, vec[2].iov_len = strlen(r->status_line); vec[3].iov_base = (void *)CRLF; vec[3].iov_len = sizeof(CRLF) - 1; - tmp = apr_pstrcatv(r->pool, vec, 4, &len); - ap_xlate_proto_to_ascii(tmp, len); - apr_brigade_write(bb, NULL, NULL, tmp, len); +#if APR_CHARSET_EBCDIC + { + char *tmp; + apr_size_t len; + tmp = apr_pstrcatv(r->pool, vec, 4, &len); + ap_xlate_proto_to_ascii(tmp, len); + apr_brigade_write(bb, NULL, NULL, tmp, len); + } +#else + apr_brigade_writev(bb, NULL, NULL, vec, 4); +#endif date = apr_palloc(r->pool, APR_RFC822_DATE_LEN); ap_recent_rfc822_date(date, r->request_time);