ignore glob no match error

This commit is contained in:
Igor Sysoev 2008-04-29 09:28:42 +00:00
parent 8443360bac
commit a13b3b97ea
5 changed files with 41 additions and 6 deletions

View File

@ -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,

View File

@ -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;
}

View File

@ -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;

View File

@ -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);

View File

@ -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;