Mercurial > hg > nginx-vendor-current
diff src/http/ngx_http_script.c @ 180:4cd3e70c4d60 NGINX_0_3_37
nginx 0.3.37
*) Feature: the "limit_except" directive.
*) Feature: the "if" directive supports the "!~", "!~*", "-f", and
"!-f" operators.
*) Feature: the ngx_http_perl_module supports the $r->request_body
method.
*) Bugfix: in the ngx_http_addition_filter_module.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Fri, 07 Apr 2006 00:00:00 +0400 |
parents | 1b490fc19afa |
children | 54aabf2b0bc6 |
line wrap: on
line diff
--- a/src/http/ngx_http_script.c +++ b/src/http/ngx_http_script.c @@ -588,8 +588,15 @@ ngx_http_script_regex_start_code(ngx_htt e->ncaptures = 0; if (code->test) { - e->sp->len = 0; - e->sp->data = (u_char *) ""; + if (code->negative_test) { + e->sp->len = 1; + e->sp->data = (u_char *) "1"; + + } else { + e->sp->len = 0; + e->sp->data = (u_char *) ""; + } + e->sp++; e->ip += sizeof(ngx_http_script_regex_code_t); @@ -618,8 +625,15 @@ ngx_http_script_regex_start_code(ngx_htt e->ncaptures = code->ncaptures; if (code->test) { - e->sp->len = 1; - e->sp->data = (u_char *) "1"; + if (code->negative_test) { + e->sp->len = 0; + e->sp->data = (u_char *) ""; + + } else { + e->sp->len = 1; + e->sp->data = (u_char *) "1"; + } + e->sp++; e->ip += sizeof(ngx_http_script_regex_code_t); @@ -911,6 +925,69 @@ ngx_http_script_not_equal_code(ngx_http_ void +ngx_http_script_file_code(ngx_http_script_engine_t *e) +{ + ngx_err_t err; + ngx_file_info_t fi; + ngx_http_variable_value_t *value; + ngx_http_script_file_code_t *code; + + value = e->sp - 1; + + code = (ngx_http_script_file_code_t *) e->ip; + e->ip += sizeof(ngx_http_script_file_code_t); + + ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0, + "http script file op %p", code->op); + + if (ngx_file_info(value->data, &fi) == -1) { + err = ngx_errno; + + if (err != NGX_ENOENT && err != NGX_ENOTDIR) { + ngx_log_error(NGX_LOG_CRIT, e->request->connection->log, err, + ngx_file_info_n " \"%s\" failed", value->data); + } + + switch (code->op) { + case ngx_http_script_file_plain: + goto false; + case ngx_http_script_file_not_plain: + goto true; + } + + goto false; + } + + switch (code->op) { + case ngx_http_script_file_plain: + if (ngx_is_file(&fi)) { + goto true; + } + goto false; + + case ngx_http_script_file_not_plain: + if (ngx_is_file(&fi)) { + goto false; + } + goto true; + } + +false: + + ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0, + "http script file op false"); + + *value = ngx_http_variable_null_value; + return; + +true: + + *value = ngx_http_variable_true_value; + return; +} + + +void ngx_http_script_complex_value_code(ngx_http_script_engine_t *e) { size_t len;