Fixed the "include" directive.

The "include" directive should be able to include multiple files if
given a filename mask.  Fixed this to work for "include" directives
inside the "map" or "types" blocks.  The "include" directive inside
the "geo" block is still not fixed.
This commit is contained in:
Ruslan Ermilov 2012-08-28 13:31:01 +00:00
parent 43f6163063
commit da4ffd8955
4 changed files with 6 additions and 21 deletions

View File

@ -12,7 +12,6 @@
static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last); static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last);
static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf); static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf);
static char *ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
static ngx_int_t ngx_conf_test_full_name(ngx_str_t *name); static ngx_int_t ngx_conf_test_full_name(ngx_str_t *name);
static void ngx_conf_flush_files(ngx_cycle_t *cycle); static void ngx_conf_flush_files(ngx_cycle_t *cycle);
@ -731,7 +730,7 @@ ngx_conf_read_token(ngx_conf_t *cf)
} }
static char * char *
ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{ {
char *rv; char *rv;

View File

@ -317,6 +317,7 @@ char *ngx_conf_check_num_bounds(ngx_conf_t *cf, void *post, void *data);
char *ngx_conf_param(ngx_conf_t *cf); char *ngx_conf_param(ngx_conf_t *cf);
char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename); char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename);
char *ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name,

View File

@ -369,7 +369,7 @@ static char *
ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
{ {
ngx_int_t rc, index; ngx_int_t rc, index;
ngx_str_t *value, file, name; ngx_str_t *value, name;
ngx_uint_t i, key; ngx_uint_t i, key;
ngx_http_map_conf_ctx_t *ctx; ngx_http_map_conf_ctx_t *ctx;
ngx_http_variable_value_t *var, **vp; ngx_http_variable_value_t *var, **vp;
@ -391,15 +391,7 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
} }
if (ngx_strcmp(value[0].data, "include") == 0) { if (ngx_strcmp(value[0].data, "include") == 0) {
file = value[1]; return ngx_conf_include(cf, dummy, conf);
if (ngx_conf_full_name(cf->cycle, &file, 1) != NGX_OK) {
return NGX_CONF_ERROR;
}
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cf->log, 0, "include %s", file.data);
return ngx_conf_parse(cf, &file);
} }
if (value[1].data[0] == '$') { if (value[1].data[0] == '$') {

View File

@ -3236,7 +3236,7 @@ ngx_http_core_type(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
{ {
ngx_http_core_loc_conf_t *clcf = conf; ngx_http_core_loc_conf_t *clcf = conf;
ngx_str_t *value, *content_type, *old, file; ngx_str_t *value, *content_type, *old;
ngx_uint_t i, n, hash; ngx_uint_t i, n, hash;
ngx_hash_key_t *type; ngx_hash_key_t *type;
@ -3249,15 +3249,8 @@ ngx_http_core_type(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
" in \"include\" directive"); " in \"include\" directive");
return NGX_CONF_ERROR; return NGX_CONF_ERROR;
} }
file = value[1];
if (ngx_conf_full_name(cf->cycle, &file, 1) != NGX_OK) { return ngx_conf_include(cf, dummy, conf);
return NGX_CONF_ERROR;
}
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cf->log, 0, "include %s", file.data);
return ngx_conf_parse(cf, &file);
} }
content_type = ngx_palloc(cf->pool, sizeof(ngx_str_t)); content_type = ngx_palloc(cf->pool, sizeof(ngx_str_t));