diff options
author | Igor Sysoev <igor@sysoev.ru> | 2008-04-29 13:28:42 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2008-04-29 13:28:42 +0400 |
commit | a13b3b97eafbbe7fa6586e4f73b8c80ee478244c (patch) | |
tree | 3bf8bd774d810a450edfcefe2c5ab7fc68010e40 | |
parent | 8443360bac77bfbc123cc40943a8f851b5a5edd6 (diff) |
ignore glob no match error
-rw-r--r-- | src/core/ngx_conf_file.c | 8 | ||||
-rw-r--r-- | src/os/unix/ngx_files.c | 10 | ||||
-rw-r--r-- | src/os/unix/ngx_files.h | 9 | ||||
-rw-r--r-- | src/os/win32/ngx_files.c | 14 | ||||
-rw-r--r-- | src/os/win32/ngx_files.h | 6 |
5 files changed, 41 insertions, 6 deletions
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c index 54769fbe0..6efcd8b7d 100644 --- a/src/core/ngx_conf_file.c +++ b/src/core/ngx_conf_file.c @@ -645,10 +645,18 @@ ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) return NGX_CONF_ERROR; } + if (strpbrk((char *) file.data, "*?[") == NULL) { + + ngx_log_debug1(NGX_LOG_DEBUG_CORE, cf->log, 0, "include %s", file.data); + + return ngx_conf_parse(cf, &file); + } + ngx_memzero(&gl, sizeof(ngx_glob_t)); gl.pattern = file.data; gl.log = cf->log; + gl.test = 1; if (ngx_open_glob(&gl) != NGX_OK) { ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno, diff --git a/src/os/unix/ngx_files.c b/src/os/unix/ngx_files.c index a091b9b77..7ee8cbd84 100644 --- a/src/os/unix/ngx_files.c +++ b/src/os/unix/ngx_files.c @@ -257,7 +257,15 @@ ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir) ngx_int_t ngx_open_glob(ngx_glob_t *gl) { - if (glob((char *) gl->pattern, GLOB_NOSORT, NULL, &gl->pglob) == 0) { + int n; + + n = glob((char *) gl->pattern, GLOB_NOSORT, NULL, &gl->pglob); + + if (n == 0) { + return NGX_OK; + } + + if (n == GLOB_NOMATCH && gl->test) { return NGX_OK; } diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h index 85dae3b97..a223b34e8 100644 --- a/src/os/unix/ngx_files.h +++ b/src/os/unix/ngx_files.h @@ -154,10 +154,11 @@ ngx_int_t ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir); typedef struct { - size_t n; - glob_t pglob; - u_char *pattern; - ngx_log_t *log; + size_t n; + glob_t pglob; + u_char *pattern; + ngx_log_t *log; + ngx_uint_t test; } ngx_glob_t; diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c index 9e5feba0e..769519856 100644 --- a/src/os/win32/ngx_files.c +++ b/src/os/win32/ngx_files.c @@ -361,6 +361,12 @@ ngx_open_glob(ngx_glob_t *gl) gl->dir = FindFirstFile((const char *) gl->pattern, &gl->finddata); if (gl->dir == INVALID_HANDLE_VALUE) { + + if (ngx_errno == ERROR_FILE_NOT_FOUND && gl->test) { + gl->no_match = 1; + return NGX_OK; + } + return NGX_ERROR; } @@ -394,6 +400,10 @@ ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name) size_t len; ngx_err_t err; + if (gl->no_match) { + return NGX_DONE; + } + if (gl->ready) { *name = gl->name; @@ -443,6 +453,10 @@ ngx_close_glob(ngx_glob_t *gl) ngx_free(gl->name.data); } + if (gl->dir == INVALID_HANDLE_VALUE) { + return; + } + if (FindClose(gl->dir) == 0) { ngx_log_error(NGX_LOG_ALERT, gl->log, ngx_errno, "FindClose(%s) failed", gl->pattern); diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h index 799e0b0c4..5f926417c 100644 --- a/src/os/win32/ngx_files.h +++ b/src/os/win32/ngx_files.h @@ -184,7 +184,11 @@ ngx_int_t ngx_de_link_info(u_char *name, ngx_dir_t *dir); typedef struct { HANDLE dir; WIN32_FIND_DATA finddata; - ngx_int_t ready; + + unsigned ready:1; + unsigned test:1; + unsigned no_match:1; + u_char *pattern; ngx_str_t name; size_t last; |