Mercurial > hg > nginx
diff src/http/ngx_http_variables.c @ 3872:83cd1910329c
allow regex as "map" parameter
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 16 Mar 2011 15:32:31 +0000 |
parents | 6802ba529ec4 |
children | fa4612bfb9fa |
line wrap: on
line diff
--- a/src/http/ngx_http_variables.c Mon Feb 21 11:47:28 2011 +0000 +++ b/src/http/ngx_http_variables.c Wed Mar 16 15:32:31 2011 +0000 @@ -1660,6 +1660,50 @@ } +void * +ngx_http_map_find(ngx_http_request_t *r, ngx_http_map_t *map, ngx_uint_t key, + u_char *text, size_t len, ngx_str_t *match) +{ + void *p; + + p = ngx_hash_find_combined(&map->hash, key, text, len); + if (p) { + return p; + } + +#if (NGX_PCRE) + + if (len && map->nregex) { + ngx_int_t n; + ngx_uint_t i; + ngx_http_map_regex_t *reg; + + reg = map->regex; + + for (i = 0; i < map->nregex; i++) { + + n = ngx_http_regex_exec(r, reg[i].regex, match); + + if (n == NGX_OK) { + return reg[i].value; + } + + if (n == NGX_DECLINED) { + continue; + } + + /* NGX_ERROR */ + + return NULL; + } + } + +#endif + + return NULL; +} + + #if (NGX_PCRE) static ngx_int_t