changeset 1980:b5263e401884

ignore glob no match error
author Igor Sysoev <igor@sysoev.ru>
date Tue, 29 Apr 2008 09:28:42 +0000
parents 278a1d3b4dbf
children 65581f79e81b
files src/core/ngx_conf_file.c src/os/unix/ngx_files.c src/os/unix/ngx_files.h src/os/win32/ngx_files.c src/os/win32/ngx_files.h
diffstat 5 files changed, 41 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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_com
         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,
--- 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 
 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;
     }
 
--- 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, 
 
 
 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;
 
 
--- 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 
     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);
--- 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,
 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;