You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2011/09/09 19:44:37 UTC
svn commit: r1167310 - /httpd/httpd/trunk/modules/http/byterange_filter.c
Author: jim
Date: Fri Sep 9 17:44:37 2011
New Revision: 1167310
URL: http://svn.apache.org/viewvc?rev=1167310&view=rev
Log:
Save creation of merged until we know we will actually need and use it.
Modified:
httpd/httpd/trunk/modules/http/byterange_filter.c
Modified: httpd/httpd/trunk/modules/http/byterange_filter.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http/byterange_filter.c?rev=1167310&r1=1167309&r2=1167310&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http/byterange_filter.c (original)
+++ httpd/httpd/trunk/modules/http/byterange_filter.c Fri Sep 9 17:44:37 2011
@@ -79,13 +79,14 @@ static int ap_set_byterange(request_rec
const char *if_range;
const char *match;
const char *ct;
- char *cur, **new;
+ char *cur;
apr_array_header_t *merged;
int num_ranges = 0, unsatisfiable = 0;
apr_off_t ostart = 0, oend = 0, sum_lengths = 0;
int in_merge = 0;
indexes_t *idx;
int ranges = 1;
+ int i;
const char *it;
*overlaps = 0;
@@ -156,7 +157,6 @@ static int ap_set_byterange(request_rec
ranges = MAX_PREALLOC_RANGES;
}
*indexes = apr_array_make(r->pool, ranges, sizeof(indexes_t));
- merged = apr_array_make(r->pool, ranges, sizeof(char *));
while ((cur = ap_getword(r->pool, &range, ','))) {
char *dash;
char *errp;
@@ -243,9 +243,6 @@ static int ap_set_byterange(request_rec
++*overlaps;
continue;
} else {
- new = (char **)apr_array_push(merged);
- *new = apr_psprintf(r->pool, "%" APR_OFF_T_FMT "-%" APR_OFF_T_FMT,
- ostart, oend);
idx = (indexes_t *)apr_array_push(*indexes);
idx->start = ostart;
idx->end = oend;
@@ -259,9 +256,6 @@ static int ap_set_byterange(request_rec
}
if (in_merge) {
- new = (char **)apr_array_push(merged);
- *new = apr_psprintf(r->pool, "%" APR_OFF_T_FMT "-%" APR_OFF_T_FMT,
- ostart, oend);
idx = (indexes_t *)apr_array_push(*indexes);
idx->start = ostart;
idx->end = oend;
@@ -277,7 +271,18 @@ static int ap_set_byterange(request_rec
"Sum of ranges not smaller than file, ignoring.");
return 0;
}
-
+
+ /*
+ * create the merged table now, now that we know we need it
+ */
+ merged = apr_array_make(r->pool, num_ranges, sizeof(char *));
+ idx = (indexes_t *)(*indexes)->elts;
+ for (i = 0; i < (*indexes)->nelts; i++, idx++) {
+ char **new = (char **)apr_array_push(merged);
+ *new = apr_psprintf(r->pool, "%" APR_OFF_T_FMT "-%" APR_OFF_T_FMT,
+ idx->start, idx->end);
+ }
+
r->status = HTTP_PARTIAL_CONTENT;
r->range = apr_array_pstrcat(r->pool, merged, ',');
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,