details: https://hg.nginx.org/njs/rev/2e3ab9dc1328 branches: changeset: 845:2e3ab9dc1328 user: Dmitry Volyntsev <xei...@nginx.com> date: Tue Mar 26 15:52:53 2019 +0300 description: Modules: added js_path directive.
diffstat: nginx/ngx_http_js_module.c | 43 ++++++++++++++++++++++++++++++++++++++++- nginx/ngx_stream_js_module.c | 45 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 83 insertions(+), 5 deletions(-) diffs (173 lines): diff -r 4c7862cf1ba1 -r 2e3ab9dc1328 nginx/ngx_http_js_module.c --- a/nginx/ngx_http_js_module.c Tue Mar 26 15:35:45 2019 +0300 +++ b/nginx/ngx_http_js_module.c Tue Mar 26 15:52:53 2019 +0300 @@ -14,6 +14,7 @@ typedef struct { njs_vm_t *vm; + ngx_array_t *paths; const njs_extern_t *req_proto; } ngx_http_js_main_conf_t; @@ -161,6 +162,13 @@ static ngx_command_t ngx_http_js_comman 0, NULL }, + { ngx_string("js_path"), + NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, + ngx_conf_set_str_array_slot, + NGX_HTTP_MAIN_CONF_OFFSET, + offsetof(ngx_http_js_main_conf_t, paths), + NULL }, + { ngx_string("js_set"), NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE2, ngx_http_js_set, @@ -2170,9 +2178,10 @@ ngx_http_js_include(ngx_conf_t *cf, ngx_ u_char *start, *end; ssize_t n; ngx_fd_t fd; - ngx_str_t *value, file; + ngx_str_t *m, *value, file; nxt_int_t rc; - nxt_str_t text; + nxt_str_t text, path; + ngx_uint_t i; njs_vm_opt_t options; ngx_file_info_t fi; ngx_pool_cleanup_t *cln; @@ -2259,6 +2268,34 @@ ngx_http_js_include(ngx_conf_t *cf, ngx_ cln->handler = ngx_http_js_cleanup_vm; cln->data = jmcf->vm; + path.start = ngx_cycle->prefix.data; + path.length = ngx_cycle->prefix.len; + + rc = njs_vm_add_path(jmcf->vm, &path); + if (rc != NXT_OK) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to add path"); + return NGX_CONF_ERROR; + } + + if (jmcf->paths != NGX_CONF_UNSET_PTR) { + m = jmcf->paths->elts; + + for (i = 0; i < jmcf->paths->nelts; i++) { + if (ngx_conf_full_name(cf->cycle, &m[i], 0) != NGX_OK) { + return NGX_CONF_ERROR; + } + + path.start = m[i].data; + path.length = m[i].len; + + rc = njs_vm_add_path(jmcf->vm, &path); + if (rc != NXT_OK) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to add path"); + return NGX_CONF_ERROR; + } + } + } + jmcf->req_proto = njs_vm_external_prototype(jmcf->vm, &ngx_http_js_externals[0]); if (jmcf->req_proto == NULL) { @@ -2363,6 +2400,8 @@ ngx_http_js_create_main_conf(ngx_conf_t * conf->req_proto = NULL; */ + conf->paths = NGX_CONF_UNSET_PTR; + return conf; } diff -r 4c7862cf1ba1 -r 2e3ab9dc1328 nginx/ngx_stream_js_module.c --- a/nginx/ngx_stream_js_module.c Tue Mar 26 15:35:45 2019 +0300 +++ b/nginx/ngx_stream_js_module.c Tue Mar 26 15:52:53 2019 +0300 @@ -15,6 +15,7 @@ typedef struct { njs_vm_t *vm; + ngx_array_t *paths; const njs_extern_t *proto; } ngx_stream_js_main_conf_t; @@ -132,6 +133,13 @@ static ngx_command_t ngx_stream_js_comm 0, NULL }, + { ngx_string("js_path"), + NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE1, + ngx_conf_set_str_array_slot, + NGX_STREAM_MAIN_CONF_OFFSET, + offsetof(ngx_stream_js_main_conf_t, paths), + NULL }, + { ngx_string("js_set"), NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE2, ngx_stream_js_set, @@ -1394,9 +1402,10 @@ ngx_stream_js_include(ngx_conf_t *cf, ng u_char *start, *end; ssize_t n; ngx_fd_t fd; - ngx_str_t *value, file; + ngx_str_t *m, *value, file; nxt_int_t rc; - nxt_str_t text; + nxt_str_t text, path; + ngx_uint_t i; njs_vm_opt_t options; ngx_file_info_t fi; ngx_pool_cleanup_t *cln; @@ -1483,6 +1492,34 @@ ngx_stream_js_include(ngx_conf_t *cf, ng cln->handler = ngx_stream_js_cleanup_vm; cln->data = jmcf->vm; + path.start = ngx_cycle->prefix.data; + path.length = ngx_cycle->prefix.len; + + rc = njs_vm_add_path(jmcf->vm, &path); + if (rc != NXT_OK) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to add path"); + return NGX_CONF_ERROR; + } + + if (jmcf->paths != NGX_CONF_UNSET_PTR) { + m = jmcf->paths->elts; + + for (i = 0; i < jmcf->paths->nelts; i++) { + if (ngx_conf_full_name(cf->cycle, &m[i], 0) != NGX_OK) { + return NGX_CONF_ERROR; + } + + path.start = m[i].data; + path.length = m[i].len; + + rc = njs_vm_add_path(jmcf->vm, &path); + if (rc != NXT_OK) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to add path"); + return NGX_CONF_ERROR; + } + } + } + jmcf->proto = njs_vm_external_prototype(jmcf->vm, &ngx_stream_js_externals[0]); @@ -1552,7 +1589,7 @@ ngx_stream_js_set(ngx_conf_t *cf, ngx_co static void * ngx_stream_js_create_main_conf(ngx_conf_t *cf) { - ngx_stream_js_srv_conf_t *conf; + ngx_stream_js_main_conf_t *conf; conf = ngx_pcalloc(cf->pool, sizeof(ngx_stream_js_main_conf_t)); if (conf == NULL) { @@ -1566,6 +1603,8 @@ ngx_stream_js_create_main_conf(ngx_conf_ * conf->proto = NULL; */ + conf->paths = NGX_CONF_UNSET_PTR; + return conf; } _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel