nginx-0.0.1-2003-05-27-16:18:54 import
diff --git a/src/core/nginx.c b/src/core/nginx.c
index 70ff149..c2fdc87 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -87,7 +87,7 @@
         conf.ctx = ngx_conf_ctx;
         conf.pool = ngx_pool;
         conf.log = &ngx_log;
-        conf.module_type = NGX_CORE_MODULE_TYPE;
+        conf.module_type = NGX_CORE_MODULE;
         conf.cmd_type = NGX_MAIN_CONF;
 
         conf_file.len = sizeof("nginx.conf") - 1;
@@ -121,7 +121,7 @@
 
         /* STUB */
         ngx_worker(&ngx_log);
-    }     
+    }
 
     return 0;
 }
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index 28068d4..527cbdf 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -6,6 +6,9 @@
 #include <ngx_conf_file.h>
 
 
+char ngx_conf_errstr[MAX_CONF_ERRSTR];
+
+
 static int argument_number[] = {
     NGX_CONF_NOARGS,
     NGX_CONF_TAKE1,
@@ -17,7 +20,7 @@
 
 char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
 {
-    int               i, rc, found;
+    int               m, rc, found;
     char             *rv;
     void             *conf, **confp;
     ngx_str_t        *name;
@@ -32,7 +35,6 @@
         fd = ngx_open_file(filename->data, NGX_FILE_RDONLY);
         if (fd == NGX_INVALID_FILE) {
             ngx_log_error(NGX_LOG_EMERG, cf->log, ngx_errno,
-                          "ngx_conf_file: "
                           ngx_open_file_n " %s failed", filename->data);
             return NGX_CONF_ERROR;
         }
@@ -44,7 +46,6 @@
 
         if (ngx_stat_fd(fd, &cf->conf_file->file.info) == -1) {
             ngx_log_error(NGX_LOG_EMERG, cf->log, ngx_errno,
-                          "ngx_conf_file: "
                           ngx_stat_fd_n " %s failed", filename->data);
         }
 
@@ -101,17 +102,17 @@
         name = (ngx_str_t *) cf->args->elts;
         found = 0;
 
-        for (i = 0; !found && ngx_modules[i]; i++) {
+        for (m = 0; !found && ngx_modules[m]; m++) {
 
             /* look up the directive in the appropriate modules */
 
-            if (ngx_modules[i]->type != NGX_CONF_MODULE_TYPE
-                && ngx_modules[i]->type != cf->module_type)
+            if (ngx_modules[m]->type != NGX_CONF_MODULE
+                && ngx_modules[m]->type != cf->module_type)
             {
                 continue;
             }
 
-            cmd = ngx_modules[i]->commands;
+            cmd = ngx_modules[m]->commands;
             if (cmd == NULL) {
                 continue;
             }
@@ -160,14 +161,14 @@
 
                     conf = NULL;
 
-                    if (cf->module_type == NGX_CORE_MODULE_TYPE) {
-                        conf = &(((void **) cf->ctx)[ngx_modules[i]->index]);
+                    if (cf->module_type == NGX_CORE_MODULE) {
+                        conf = &(((void **) cf->ctx)[ngx_modules[m]->index]);
 
                     } else if (cf->ctx) {
                         confp = *(void **) ((char *) cf->ctx + cmd->conf);
 
                         if (confp) {
-                            conf = confp[*(int *)(ngx_modules[i]->ctx)];
+                            conf = confp[ngx_modules[m]->ctx_index];
                         }
                     }
 
@@ -185,11 +186,19 @@
                         return NGX_CONF_ERROR;
 
                     } else {
-                        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                                     "%s %s in %s:%d",
-                                     name->data, rv,
-                                     cf->conf_file->file.name.data,
-                                     cf->conf_file->line);
+                        if (rv == ngx_conf_errstr) {
+                            ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                                         "%s in %s:%d",
+                                         rv,
+                                         cf->conf_file->file.name.data,
+                                         cf->conf_file->line);
+                        } else {
+                            ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                                         "%s %s in %s:%d",
+                                         name->data, rv,
+                                         cf->conf_file->file.name.data,
+                                         cf->conf_file->line);
+                        }
 
                         return NGX_CONF_ERROR;
                     }
@@ -430,7 +439,7 @@
 }
 
 
-char *ngx_conf_set_flag_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
+char *ngx_conf_set_flag_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {
     int         flag;
     ngx_str_t  *value;
@@ -457,13 +466,13 @@
 }
 
 
-char *ngx_conf_set_str_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
+char *ngx_conf_set_str_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {
     ngx_str_t  *field, *value;
 
     field = (ngx_str_t *) (conf + cmd->offset);
 
-    if (field->len > 0) {
+    if (field->data) {
         return "is duplicate";
     }
 
@@ -476,7 +485,7 @@
 }
 
 
-char *ngx_conf_set_num_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
+char *ngx_conf_set_num_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {
     int         num, len;
     ngx_str_t  *value;
@@ -500,7 +509,7 @@
 }
 
 
-char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
+char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {
     int         size, len, scale;
     char        last;
@@ -545,7 +554,7 @@
 }
 
 
-char *ngx_conf_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
+char *ngx_conf_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {
     int         size, total, len, scale;
     u_int       max, i;
@@ -640,7 +649,7 @@
 }
 
 
-char *ngx_conf_set_sec_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
+char *ngx_conf_set_sec_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {
     int         size, total, len, scale;
     u_int       max, i;
@@ -747,7 +756,7 @@
 }
 
 
-char *ngx_conf_unsupported(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
+char *ngx_conf_unsupported(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {
     return "unsupported on this platform";
 }
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index 40b9763..3624d5d 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -40,9 +40,14 @@
 #define NGX_CONF_BLOCK_DONE  1
 #define NGX_CONF_FILE_DONE   2
 
+#define NGX_MODULE           0, 0
 
-#define NGX_CORE_MODULE_TYPE 0x45524F43  /* "CORE" */
-#define NGX_CONF_MODULE_TYPE 0x464E4F43  /* "CONF" */
+#define NGX_CORE_MODULE      0x45524F43  /* "CORE" */
+#define NGX_CONF_MODULE      0x464E4F43  /* "CONF" */
+
+
+#define MAX_CONF_ERRSTR      256
+extern  char ngx_conf_errstr[MAX_CONF_ERRSTR];
 
 
 typedef struct ngx_conf_s  ngx_conf_t;
@@ -52,16 +57,18 @@
 struct ngx_command_s {
     ngx_str_t  name;
     int        type;
-    char    *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, char *conf);
+    char    *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
     int        conf;
     int        offset;
     void      *bounds;
 };
 
+#define ngx_null_command   {ngx_null_string, 0, NULL, 0, 0, NULL}
 
 typedef struct {
-    void           *ctx;
+    int             ctx_index;
     int             index;
+    void           *ctx;
     ngx_command_t  *commands;
     int             type;
     int           (*init_module)(ngx_pool_t *p);
@@ -129,6 +136,17 @@
         conf = (prev == (size_t) NGX_CONF_UNSET) ? default : prev;           \
     }
 
+#define ngx_conf_merge_str_value(conf, prev, default)                        \
+    if (conf.len == 0) {                                                     \
+        if (prev.len) {                                                      \
+            conf.len = prev.len;                                             \
+            conf.data = prev.data;                                           \
+        } else {                                                             \
+            conf.len = sizeof(default) - 1;                                  \
+            conf.data = default;                                             \
+        }                                                                    \
+    }
+
 
 #define addressof(addr)  ((int) &addr)
 
@@ -136,12 +154,12 @@
 char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename);
 
 
-char *ngx_conf_set_flag_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf);
-char *ngx_conf_set_str_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf);
-char *ngx_conf_set_num_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf);
-char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf);
-char *ngx_conf_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf);
-char *ngx_conf_set_time_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf);
+char *ngx_conf_set_flag_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+char *ngx_conf_set_str_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+char *ngx_conf_set_num_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+char *ngx_conf_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+char *ngx_conf_set_time_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
 
 
 extern ngx_module_t     *ngx_modules[];
diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index 0210842..59bf333 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -10,9 +10,9 @@
 #include <ngx_hunk.h>
 #include <ngx_array.h>
 #include <ngx_string.h>
-#endif
 
 #include <ngx_server.h>
+#endif
 
 #if 0
 typedef struct ngx_connection_s  ngx_connection_t;
@@ -35,7 +35,7 @@
 
     void            (*handler)(ngx_connection_t *c);
     void             *ctx;
-    ngx_server_t     *servers;
+    void             *servers;
 
     ngx_log_t        *log;
 
@@ -114,7 +114,6 @@
 
 /* TODO: move it to OS specific file */
 #if (__FreeBSD__)
-ngx_chain_t *ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in);
 ngx_chain_t *ngx_aio_write_chain(ngx_connection_t *c, ngx_chain_t *in);
 #endif
 
diff --git a/src/core/ngx_modules.c b/src/core/ngx_modules.c
index cf5458c..8f57db3 100644
--- a/src/core/ngx_modules.c
+++ b/src/core/ngx_modules.c
@@ -30,6 +30,7 @@
 extern ngx_module_t  ngx_http_header_filter_module;
 
 extern ngx_module_t  ngx_http_index_module;
+extern ngx_module_t  ngx_http_static_module;
 extern ngx_module_t  ngx_http_proxy_module;
 
 
@@ -68,9 +69,8 @@
     /* &ngx_http_ssi_filter_module, */
 
     &ngx_http_index_module,
-/*
-    &ngx_http_proxy_module,
-*/
+    /* &ngx_http_static_module, */
+    /* &ngx_http_proxy_module, */
 
     NULL
 };