This allows ap_vrprintf to handle > 4k length writes, as listed in STATUS.
regards,
--
Cody Sherr
Engineer
Covalent Technologies
phone: (415)536-5292
email: [EMAIL PROTECTED]
Index: protocol.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/protocol.c,v
retrieving revision 1.35
diff -u -r1.35 protocol.c
--- protocol.c 2001/07/30 04:38:02 1.35
+++ protocol.c 2001/08/01 21:08:02
@@ -1135,14 +1135,31 @@
AP_DECLARE(int) ap_vrprintf(request_rec *r, const char *fmt, va_list va)
{
- char buf[4096];
+ char *buf;
+ int buf_size = 4096; /* start with a 4k buffer */
apr_size_t written;
if (r->connection->aborted)
return -1;
- /* ### fix this mechanism to allow more than 4K of output */
- written = apr_vsnprintf(buf, sizeof(buf), fmt, va);
+ buf = apr_palloc(r->pool, buf_size);
+ while (1) {
+ written = apr_vsnprintf(buf, buf_size, fmt, va);
+
+ /*
+ * Per the apr_vsnprintf comments, in no event does apr_snprintf return a
+negative number.
+ * Therefore, it's not possible to distinguish between an output which was
+truncated,
+ * and an output which exactly filled the buffer.
+ */
+ if (written == buf_size) {
+ buf_size *= 2;
+ buf = apr_palloc(r->pool, buf_size); /* want realloc */
+ }
+ else {
+ break;
+ }
+ }
+
if (buffer_output(r, buf, written) != APR_SUCCESS)
return -1;