# HG changeset patch # User Igor Sysoev # Date 1181043779 0 # Node ID 5e4d3b5d7ad0a8e3708f19e95bf5d966d74a752a # Parent f8a40ccafb041d9604828ec8daeb65ad6da3ac35 use pointer to an array instead of array for inclusive locations inside location diff --git a/src/http/modules/ngx_http_rewrite_module.c b/src/http/modules/ngx_http_rewrite_module.c --- a/src/http/modules/ngx_http_rewrite_module.c +++ b/src/http/modules/ngx_http_rewrite_module.c @@ -567,15 +567,14 @@ ngx_http_rewrite_if(ngx_conf_t *cf, ngx_ clcf->name = pclcf->name; clcf->noname = 1; - if (pclcf->locations.elts == NULL) { - if (ngx_array_init(&pclcf->locations, cf->pool, 4, sizeof(void *)) - == NGX_ERROR) - { + if (pclcf->locations == NULL) { + pclcf->locations = ngx_array_create(cf->pool, 2, sizeof(void *)); + if (pclcf->locations == NULL) { return NGX_CONF_ERROR; } } - clcfp = ngx_array_push(&pclcf->locations); + clcfp = ngx_array_push(pclcf->locations); if (clcfp == NULL) { return NGX_CONF_ERROR; } diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c --- a/src/http/ngx_http.c +++ b/src/http/ngx_http.c @@ -1015,7 +1015,11 @@ ngx_http_merge_locations(ngx_conf_t *cf, return rv; } - rv = ngx_http_merge_locations(cf, &clcfp[i]->locations, + if (clcfp[i]->locations == NULL) { + continue; + } + + rv = ngx_http_merge_locations(cf, clcfp[i]->locations, clcfp[i]->loc_conf, module, ctx_index); if (rv != NGX_CONF_OK) { return rv; diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -1008,8 +1008,8 @@ ngx_http_core_find_location(ngx_http_req if (found) { clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); - if (clcf->locations.nelts) { - rc = ngx_http_core_find_location(r, &clcf->locations, + if (clcf->locations) { + rc = ngx_http_core_find_location(r, clcf->locations, clcf->regex_start, len); if (rc != NGX_OK) { @@ -1793,15 +1793,15 @@ ngx_http_core_location(ngx_conf_t *cf, n return NGX_CONF_ERROR; } - if (pclcf->locations.elts == NULL) { - if (ngx_array_init(&pclcf->locations, cf->pool, 4, sizeof(void *)) - != NGX_OK) - { + if (pclcf->locations == NULL) { + pclcf->locations = ngx_array_create(cf->pool, 2, sizeof(void *)); + + if (pclcf->locations == NULL) { return NGX_CONF_ERROR; } } - clcfp = ngx_array_push(&pclcf->locations); + clcfp = ngx_array_push(pclcf->locations); if (clcfp == NULL) { return NGX_CONF_ERROR; } @@ -1821,13 +1821,17 @@ ngx_http_core_location(ngx_conf_t *cf, n return rv; } - ngx_sort(clcf->locations.elts, (size_t) clcf->locations.nelts, + if (clcf->locations == NULL) { + return rv; + } + + ngx_sort(clcf->locations->elts, (size_t) clcf->locations->nelts, sizeof(ngx_http_core_loc_conf_t *), ngx_http_core_cmp_locations); - clcf->regex_start = clcf->locations.nelts; - clcfp = clcf->locations.elts; - - for (i = 0; i < clcf->locations.nelts; i++) { + clcf->regex_start = clcf->locations->nelts; + clcfp = clcf->locations->elts; + + for (i = 0; i < clcf->locations->nelts; i++) { if (clcfp[i]->regex) { clcf->regex_start = i; break; @@ -2855,15 +2859,14 @@ ngx_http_core_limit_except(ngx_conf_t *c lcf->name = clcf->name; lcf->noname = 1; - if (clcf->locations.elts == NULL) { - if (ngx_array_init(&clcf->locations, cf->pool, 4, sizeof(void *)) - == NGX_ERROR) - { + if (clcf->locations == NULL) { + clcf->locations = ngx_array_create(cf->pool, 2, sizeof(void *)); + if (clcf->locations == NULL) { return NGX_CONF_ERROR; } } - clcfp = ngx_array_push(&clcf->locations); + clcfp = ngx_array_push(clcf->locations); if (clcfp == NULL) { return NGX_CONF_ERROR; } diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h --- a/src/http/ngx_http_core_module.h +++ b/src/http/ngx_http_core_module.h @@ -222,7 +222,7 @@ struct ngx_http_core_loc_conf_s { unsigned alias:1; /* array of inclusive ngx_http_core_loc_conf_t */ - ngx_array_t locations; + ngx_array_t *locations; /* pointer to the modules' loc_conf */ void **loc_conf ;