# HG changeset patch # User Igor Sysoev # Date 1314709572 0 # Node ID 3205a6d6c6ec1037534a64dddd9d9552f7ceae54 # Parent e9213133993a50dbd0ec79848e7d77d7d56ffe47 Ranges processing small optimization. diff --git a/src/http/modules/ngx_http_range_filter_module.c b/src/http/modules/ngx_http_range_filter_module.c --- a/src/http/modules/ngx_http_range_filter_module.c +++ b/src/http/modules/ngx_http_range_filter_module.c @@ -234,12 +234,13 @@ ngx_int_t ngx_http_range_parse(ngx_http_request_t *r, ngx_http_range_filter_ctx_t *ctx) { u_char *p; - off_t start, end, size; + off_t start, end, size, content_length; ngx_uint_t suffix; ngx_http_range_t *range; p = r->headers_in.range->value.data + 6; size = 0; + content_length = r->headers_out.content_length_n; for ( ;; ) { start = 0; @@ -263,14 +264,14 @@ ngx_http_range_parse(ngx_http_request_t return NGX_HTTP_RANGE_NOT_SATISFIABLE; } - if (start >= r->headers_out.content_length_n) { + if (start >= content_length) { goto skip; } while (*p == ' ') { p++; } if (*p == ',' || *p == '\0') { - end = r->headers_out.content_length_n; + end = content_length; goto found; } @@ -294,16 +295,16 @@ ngx_http_range_parse(ngx_http_request_t } if (suffix) { - start = r->headers_out.content_length_n - end; - end = r->headers_out.content_length_n - 1; + start = content_length - end; + end = content_length - 1; } if (start > end) { goto skip; } - if (end >= r->headers_out.content_length_n) { - end = r->headers_out.content_length_n; + if (end >= content_length) { + end = content_length; } else { end++; @@ -332,7 +333,7 @@ ngx_http_range_parse(ngx_http_request_t return NGX_HTTP_RANGE_NOT_SATISFIABLE; } - if (size > r->headers_out.content_length_n) { + if (size > content_length) { return NGX_DECLINED; }