diff src/http/modules/ngx_http_index_handler.c @ 24:77c7629a2627

nginx-0.0.1-2002-12-10-21:05:12 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 10 Dec 2002 18:05:12 +0000
parents f323b4f74e4a
children 53cb81681040
line wrap: on
line diff
--- a/src/http/modules/ngx_http_index_handler.c
+++ b/src/http/modules/ngx_http_index_handler.c
@@ -11,17 +11,24 @@
 
 
 static void *ngx_http_index_create_conf(ngx_pool_t *pool);
-static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf, char *value);
+static void *ngx_http_index_merge_conf(ngx_pool_t *p,
+                                       void *parent, void *child);
+static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf,
+                                      ngx_str_t *value);
 
 static ngx_command_t ngx_http_index_commands[];
 
 
 ngx_http_module_t  ngx_http_index_module = {
     NGX_HTTP_MODULE,
+
     NULL,                                  /* create server config */
     ngx_http_index_create_conf,            /* create location config */
     ngx_http_index_commands,               /* module directives */
+
     NULL,                                  /* init module */
+    NULL,                                  /* translate handler */
+
     NULL,                                  /* init output body filter */
 };
 
@@ -36,32 +43,32 @@ static ngx_command_t ngx_http_index_comm
 
 };
 
+
 int ngx_http_index_handler(ngx_http_request_t *r)
 {
-    int          index_len, i;
-    char        *name, *loc, *file;
+    int          i;
+    char        *name, *file;
+    ngx_str_t    loc, *index;
     ngx_err_t    err;
     ngx_fd_t     fd;
 
-    ngx_http_index_file_t  *index;
     ngx_http_index_conf_t  *cf;
 
     cf = (ngx_http_index_conf_t *)
                             ngx_get_module_loc_conf(r, ngx_http_index_module);
 
-    index_len = (*(r->uri_end - 1) == '/') ? cf->max_index_len : 0;
-
     ngx_test_null(name,
-                  ngx_palloc(r->pool, r->uri_end - r->uri_start + index_len
-                                      + r->server->doc_root_len),
+                  ngx_palloc(r->pool,
+                             r->server->doc_root_len + r->uri.len
+                             + cf->max_index_len),
                   NGX_HTTP_INTERNAL_SERVER_ERROR);
 
-    loc = ngx_cpystrn(name, r->server->doc_root, r->server->doc_root_len);
-    file = ngx_cpystrn(loc, r->uri_start, r->uri_end - r->uri_start + 1);
+    loc.data = ngx_cpystrn(name, r->server->doc_root, r->server->doc_root_len);
+    file = ngx_cpystrn(loc.data, r->uri.data, r->uri.len + 1);
 
-    index = (ngx_http_index_file_t *) cf->indices->elts;
+    index = (ngx_str_t *) cf->indices->elts;
     for (i = 0; i < cf->indices->nelts; i++) {
-        ngx_memcpy(file, index[i].name, index[i].len);
+        ngx_memcpy(file, index[i].data, index[i].len + 1);
 
         fd = ngx_open_file(name, NGX_FILE_RDONLY);
         if (fd == -1) {
@@ -75,15 +82,18 @@ int ngx_http_index_handler(ngx_http_requ
             return NGX_HTTP_INTERNAL_SERVER_ERROR;
         }
 
-        r->filename = name; 
+        r->filename.len = r->server->doc_root_len + r->uri.len + index[i].len;
+        r->filename.data = name; 
         r->fd = fd; 
 
+        loc.len = r->uri.len + index[i].len;
         return ngx_http_internal_redirect(r, loc);
     }
 
     return NGX_DECLINED;
 }
 
+
 static void *ngx_http_index_create_conf(ngx_pool_t *pool)
 {
     ngx_http_index_conf_t  *conf;
@@ -91,38 +101,42 @@ static void *ngx_http_index_create_conf(
     ngx_test_null(conf, ngx_pcalloc(pool, sizeof(ngx_http_index_conf_t)), NULL);
 
     ngx_test_null(conf->indices,
-                  ngx_create_array(pool, sizeof(ngx_http_index_file_t), 3),
+                  ngx_create_array(pool, sizeof(ngx_str_t), 3),
                   NULL);
 
     return conf;
 }
 
+
 static void *ngx_http_index_merge_conf(ngx_pool_t *p, void *parent, void *child)
 {
     ngx_http_index_conf_t *prev = (ngx_http_index_conf_t *) parent;
     ngx_http_index_conf_t *conf = (ngx_http_index_conf_t *) child;
-    ngx_http_index_file_t *index;
+    ngx_str_t  *index;
 
     if (conf->max_index_len == 0) {
         if (prev->max_index_len != 0)
             return prev;
 
         ngx_test_null(index, ngx_push_array(conf->indices), NULL);
-        index->name = NGX_HTTP_INDEX;
-        conf->max_index_len = index->len = sizeof(NGX_HTTP_INDEX) + 1;
+        index->len = sizeof(NGX_HTTP_INDEX) - 1;
+        index->data = NGX_HTTP_INDEX;
+        conf->max_index_len = sizeof(NGX_HTTP_INDEX);
     }
 
     return conf;
 }
 
-static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf, char *value)
+
+static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf,
+                                      ngx_str_t *value)
 {
     ngx_http_index_conf_t *cf = (ngx_http_index_conf_t *) conf;
-    ngx_http_index_file_t *index;
+    ngx_str_t  *index;
 
     ngx_test_null(index, ngx_push_array(cf->indices), NULL);
-    index->name = value;
-    index->len = strlen(value) + 1;
+    index->len = value->len;
+    index->data = value->data;
 
     if (cf->max_index_len < index->len)
         cf->max_index_len = index->len;