aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_script.h
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2019-04-24 16:38:51 +0300
committerRuslan Ermilov <ru@nginx.com>2019-04-24 16:38:51 +0300
commit2ace7fc3e683fcfa44ff9c355face60983db7eae (patch)
treef02d592ebc883346884f35a1438acdcb765e4840 /src/http/ngx_http_script.h
parent2eb2a93d8a3ad17eb25b2220ffe1f54d09b3fc4c (diff)
downloadnginx-2ace7fc3e683fcfa44ff9c355face60983db7eae.tar.gz
nginx-2ace7fc3e683fcfa44ff9c355face60983db7eae.zip
Added ngx_http_set_complex_value_size_slot().
If a complex value is expected to be of type size_t, and the compiled value is constant, the constant size_t value is remembered at compile time. The value is accessed through ngx_http_complex_value_size() which either returns the remembered constant or evaluates the expression and parses it as size_t.
Diffstat (limited to 'src/http/ngx_http_script.h')
-rw-r--r--src/http/ngx_http_script.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/http/ngx_http_script.h b/src/http/ngx_http_script.h
index 25bb6d73f..a6b345e2d 100644
--- a/src/http/ngx_http_script.h
+++ b/src/http/ngx_http_script.h
@@ -68,6 +68,10 @@ typedef struct {
ngx_uint_t *flushes;
void *lengths;
void *values;
+
+ union {
+ size_t size;
+ } u;
} ngx_http_complex_value_t;
@@ -207,9 +211,13 @@ void ngx_http_script_flush_complex_value(ngx_http_request_t *r,
ngx_http_complex_value_t *val);
ngx_int_t ngx_http_complex_value(ngx_http_request_t *r,
ngx_http_complex_value_t *val, ngx_str_t *value);
+size_t ngx_http_complex_value_size(ngx_http_request_t *r,
+ ngx_http_complex_value_t *val, size_t default_value);
ngx_int_t ngx_http_compile_complex_value(ngx_http_compile_complex_value_t *ccv);
char *ngx_http_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+char *ngx_http_set_complex_value_size_slot(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
ngx_int_t ngx_http_test_predicates(ngx_http_request_t *r,