]> git.kaiwu.me - nginx.git/commitdiff
Ranges processing small optimization.
authorIgor Sysoev <igor@sysoev.ru>
Tue, 30 Aug 2011 12:45:24 +0000 (12:45 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Tue, 30 Aug 2011 12:45:24 +0000 (12:45 +0000)
src/http/modules/ngx_http_range_filter_module.c

index 05d64a0d57abf172e4e57933d28d3a310d335377..c0a835c3e89d0670afecefe0da4ea24bee95ff5b 100644 (file)
@@ -270,20 +270,8 @@ ngx_http_range_parse(ngx_http_request_t *r, ngx_http_range_filter_ctx_t *ctx)
             while (*p == ' ') { p++; }
 
             if (*p == ',' || *p == '\0') {
-                range = ngx_array_push(&ctx->ranges);
-                if (range == NULL) {
-                    return NGX_ERROR;
-                }
-
-                range->start = start;
-                range->end = r->headers_out.content_length_n;
-                size += range->end - start;
-
-                if (*p++ != ',') {
-                    break;
-                }
-
-                continue;
+                end = r->headers_out.content_length_n;
+                goto found;
             }
 
         } else {
@@ -314,25 +302,28 @@ ngx_http_range_parse(ngx_http_request_t *r, ngx_http_range_filter_ctx_t *ctx)
             return NGX_HTTP_RANGE_NOT_SATISFIABLE;
         }
 
-        range = ngx_array_push(&ctx->ranges);
-        if (range == NULL) {
-            return NGX_ERROR;
-        }
-
-        range->start = start;
-
         if (end >= r->headers_out.content_length_n) {
             /*
              * Download Accelerator sends the last byte position
              * that equals to the file length
              */
-            range->end = r->headers_out.content_length_n;
+            end = r->headers_out.content_length_n;
 
         } else {
-            range->end = end + 1;
+            end++;
         }
 
-        size += range->end - start;
+    found:
+
+        range = ngx_array_push(&ctx->ranges);
+        if (range == NULL) {
+            return NGX_ERROR;
+        }
+
+        range->start = start;
+        range->end = end;
+
+        size += end - start;
 
         if (*p++ != ',') {
             break;