]> git.kaiwu.me - nginx.git/commitdiff
Win32: removed NGX_DIR_MASK concept.
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 24 Dec 2018 18:07:05 +0000 (21:07 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 24 Dec 2018 18:07:05 +0000 (21:07 +0300)
Previous interface of ngx_open_dir() assumed that passed directory name
has a room for NGX_DIR_MASK at the end (NGX_DIR_MASK_LEN bytes).  While all
direct users of ngx_dir_open() followed this interface, this also implied
similar requirements for indirect uses - in particular, via ngx_walk_tree().

Currently none of ngx_walk_tree() uses provides appropriate space, and
fixing this does not look like a right way to go.  Instead, ngx_dir_open()
interface was changed to not require any additional space and use
appropriate allocations instead.

src/core/ngx_file.c
src/http/modules/ngx_http_autoindex_module.c
src/http/modules/ngx_http_random_index_module.c
src/os/unix/ngx_files.h
src/os/win32/ngx_files.c
src/os/win32/ngx_files.h

index 56780303bc1f349b7bee8072b08b249e6732f784..63ada85576a457eb1ac7e8469f1e38f3d677a109 100644 (file)
@@ -1017,13 +1017,13 @@ ngx_walk_tree(ngx_tree_ctx_t *ctx, ngx_str_t *tree)
 
         file.len = tree->len + 1 + len;
 
-        if (file.len + NGX_DIR_MASK_LEN > buf.len) {
+        if (file.len > buf.len) {
 
             if (buf.len) {
                 ngx_free(buf.data);
             }
 
-            buf.len = tree->len + 1 + len + NGX_DIR_MASK_LEN;
+            buf.len = tree->len + 1 + len;
 
             buf.data = ngx_alloc(buf.len + 1, ctx->log);
             if (buf.data == NULL) {
index d59fba23701c3adef2573c1afa030c32da5811a9..30fd601ef5379eff80fb61c30c94d34658d35587 100644 (file)
@@ -186,8 +186,6 @@ ngx_http_autoindex_handler(ngx_http_request_t *r)
         return rc;
     }
 
-    /* NGX_DIR_MASK_LEN is lesser than NGX_HTTP_AUTOINDEX_PREALLOCATE */
-
     last = ngx_http_map_uri_to_path(r, &path, &root,
                                     NGX_HTTP_AUTOINDEX_PREALLOCATE);
     if (last == NULL) {
index b47ee4f0dde3ee46705570d4f17485587fcb8b19..ed00ad53ca2f1e2548ce9a61e5e9c73c72e2b103 100644 (file)
@@ -98,7 +98,7 @@ ngx_http_random_index_handler(ngx_http_request_t *r)
     }
 
 #if (NGX_HAVE_D_TYPE)
-    len = NGX_DIR_MASK_LEN;
+    len = 0;
 #else
     len = NGX_HTTP_RANDOM_INDEX_PREALLOCATE;
 #endif
index 07872b1388178409eeb2754d3392799bfce6cb29..383e38e65c7d48f61f527ee692561dca1a8b937f 100644 (file)
@@ -213,9 +213,6 @@ void ngx_close_file_mapping(ngx_file_mapping_t *fm);
 #endif
 
 
-#define NGX_DIR_MASK_LEN         0
-
-
 ngx_int_t ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir);
 #define ngx_open_dir_n           "opendir()"
 
index 55d7f7696c851c847237acacae7a070c63a83b5d..0b131b58af25763e7ad5b2396a5138351834ca98 100644 (file)
@@ -427,16 +427,31 @@ ngx_realpath(u_char *path, u_char *resolved)
 ngx_int_t
 ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
 {
-    ngx_cpystrn(name->data + name->len, NGX_DIR_MASK, NGX_DIR_MASK_LEN + 1);
+    u_char     *pattern, *p;
+    ngx_err_t   err;
+
+    pattern = malloc(name->len + 3);
+    if (pattern == NULL) {
+        return NGX_ERROR;
+    }
 
-    dir->dir = FindFirstFile((const char *) name->data, &dir->finddata);
+    p = ngx_cpymem(pattern, name->data, name->len);
 
-    name->data[name->len] = '\0';
+    *p++ = '/';
+    *p++ = '*';
+    *p = '\0';
+
+    dir->dir = FindFirstFile((const char *) pattern, &dir->finddata);
 
     if (dir->dir == INVALID_HANDLE_VALUE) {
+        err = ngx_errno;
+        ngx_free(pattern);
+        ngx_set_errno(err);
         return NGX_ERROR;
     }
 
+    ngx_free(pattern);
+
     dir->valid_info = 1;
     dir->ready = 1;
 
index 895daeab481d610a72672f21d9f0fa2a863396e4..6eb720e78ed9090390712f77571aff6a68a2a96e 100644 (file)
@@ -181,9 +181,6 @@ u_char *ngx_realpath(u_char *path, u_char *resolved);
 #define NGX_HAVE_MAX_PATH           1
 #define NGX_MAX_PATH                MAX_PATH
 
-#define NGX_DIR_MASK                (u_char *) "/*"
-#define NGX_DIR_MASK_LEN            2
-
 
 ngx_int_t ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir);
 #define ngx_open_dir_n              "FindFirstFile()"