aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/ngx_http_fastcgi_module.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-11-16 12:19:02 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-11-16 12:19:02 +0000
commitc05f20ec2eace8239c53f680294c9a2154b39e7d (patch)
treefba2dd2e0c4f7a36f4b396b759645ced61c3c709 /src/http/modules/ngx_http_fastcgi_module.c
parentc0ae4716ece5e48c4e82863959d3ae9ff6693e65 (diff)
downloadnginx-c05f20ec2eace8239c53f680294c9a2154b39e7d.tar.gz
nginx-c05f20ec2eace8239c53f680294c9a2154b39e7d.zip
regex named captures
Diffstat (limited to 'src/http/modules/ngx_http_fastcgi_module.c')
-rw-r--r--src/http/modules/ngx_http_fastcgi_module.c61
1 files changed, 27 insertions, 34 deletions
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
index ba79cea0f..d7aa9b259 100644
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -2407,27 +2407,25 @@ ngx_http_fastcgi_split(ngx_http_request_t *r, ngx_http_fastcgi_loc_conf_t *flcf)
n = ngx_regex_exec(flcf->split_regex, &r->uri, captures, (1 + 2) * 3);
- if (n == NGX_REGEX_NO_MATCHED) {
- f->script_name = r->uri;
+ if (n >= 0) { /* match */
+ f->script_name.len = captures[3] - captures[2];
+ f->script_name.data = r->uri.data;
+
+ f->path_info.len = captures[5] - captures[4];
+ f->path_info.data = r->uri.data + f->script_name.len;
+
return f;
}
- if (n < 0) {
- ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
- ngx_regex_exec_n " failed: %d on \"%V\" using \"%V\"",
- n, &r->uri, &flcf->split_name);
- return NULL;
+ if (n == NGX_REGEX_NO_MATCHED) {
+ f->script_name = r->uri;
+ return f;
}
- /* match */
-
- f->script_name.len = captures[3] - captures[2];
- f->script_name.data = r->uri.data;
-
- f->path_info.len = captures[5] - captures[4];
- f->path_info.data = r->uri.data + f->script_name.len;
-
- return f;
+ ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
+ ngx_regex_exec_n " failed: %i on \"%V\" using \"%V\"",
+ n, &r->uri, &flcf->split_name);
+ return NULL;
#else
@@ -2518,39 +2516,34 @@ ngx_http_fastcgi_split_path_info(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
#if (NGX_PCRE)
ngx_http_fastcgi_loc_conf_t *flcf = conf;
- ngx_int_t n;
- ngx_str_t *value, err;
- u_char errstr[NGX_MAX_CONF_ERRSTR];
+ ngx_str_t *value;
+ ngx_regex_compile_t rc;
+ u_char errstr[NGX_MAX_CONF_ERRSTR];
value = cf->args->elts;
flcf->split_name = value[1];
- err.len = NGX_MAX_CONF_ERRSTR;
- err.data = errstr;
-
- flcf->split_regex = ngx_regex_compile(&value[1], 0, cf->pool, &err);
-
- if (flcf->split_regex == NULL) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%s", err.data);
- return NGX_CONF_ERROR;
- }
+ ngx_memzero(&rc, sizeof(ngx_regex_compile_t));
- n = ngx_regex_capture_count(flcf->split_regex);
+ rc.pattern = value[1];
+ rc.pool = cf->pool;
+ rc.err.len = NGX_MAX_CONF_ERRSTR;
+ rc.err.data = errstr;
- if (n < 0) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- ngx_regex_capture_count_n " failed for "
- "pattern \"%V\"", &value[1]);
+ if (ngx_regex_compile(&rc) != NGX_OK) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
return NGX_CONF_ERROR;
}
- if (n != 2) {
+ if (rc.captures != 2) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"pattern \"%V\" must have 2 captures", &value[1]);
return NGX_CONF_ERROR;
}
+ flcf->split_regex = rc.regex;
+
return NGX_CONF_OK;
#else