nginx-0.0.1-2003-03-11-23:38:13 import
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index e38bbce..de3bf75 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -206,7 +206,7 @@
 
     cf->args->nelts = 0;
     h = cf->conf_file->hunk;
-    start = h->pos.mem;
+    start = h->pos;
 
 #if 0
 ngx_log_debug(cf->log, "TOKEN START");
@@ -214,31 +214,31 @@
 
     for ( ;; ) {
 
-        if (h->pos.mem >= h->last.mem) {
+        if (h->pos >= h->last) {
             if (cf->conf_file->file.offset
                                   >= ngx_file_size(cf->conf_file->file.info)) {
                 return NGX_CONF_FILE_DONE;
             }
 
-            if (h->pos.mem - start) {
-                ngx_memcpy(h->start, start, h->pos.mem - start);
+            if (h->pos - start) {
+                ngx_memcpy(h->start, start, h->pos - start);
             }
 
             n = ngx_read_file(&cf->conf_file->file,
-                              h->start + (h->pos.mem - start),
-                              h->end - (h->start + (h->pos.mem - start)),
+                              h->start + (h->pos - start),
+                              h->end - (h->start + (h->pos - start)),
                               cf->conf_file->file.offset);
 
             if (n == NGX_ERROR) {
                 return NGX_ERROR;
             }
 
-            h->pos.mem = h->start + (h->pos.mem - start);
+            h->pos = h->start + (h->pos - start);
             start = h->start;
-            h->last.mem = h->pos.mem + n;
+            h->last = h->pos + n;
         }
 
-        ch = *h->pos.mem++;
+        ch = *h->pos++;
 
 #if 0
 ngx_log_debug(cf->log, "%d:%d:%d:%d:%d '%c'" _
@@ -282,7 +282,7 @@
                 continue;
             }
 
-            start = h->pos.mem - 1;
+            start = h->pos - 1;
 
             switch (ch) {
 
@@ -363,11 +363,11 @@
             if (found) {
                 ngx_test_null(word, ngx_push_array(cf->args), NGX_ERROR);
                 ngx_test_null(word->data,
-                              ngx_palloc(cf->pool, h->pos.mem - start + 1),
+                              ngx_palloc(cf->pool, h->pos - start + 1),
                               NGX_ERROR);
 
                 for (dst = word->data, src = start, len = 0;
-                     src < h->pos.mem - 1;
+                     src < h->pos - 1;
                      len++)
                 {
                     if (*src == '\\') {
diff --git a/src/core/ngx_hunk.c b/src/core/ngx_hunk.c
index e1e960f..fe26a33 100644
--- a/src/core/ngx_hunk.c
+++ b/src/core/ngx_hunk.c
@@ -10,16 +10,14 @@
 
     ngx_test_null(h, ngx_palloc(pool, sizeof(ngx_hunk_t)), NULL);
 
-#if !(HAVE_OFFSET_EQUAL_PTR)
-    h->pos.file = h->last.file = 0;
-#endif
-
     ngx_test_null(h->pre_start, ngx_palloc(pool, size + before + after), NULL);
-    h->start = h->pos.mem = h->last.mem = h->pre_start + before;
-    h->end = h->last.mem + size;
+
+    h->start = h->pos = h->last = h->pre_start + before;
+    h->file_pos = h->file_last = 0;
+    h->end = h->last + size;
     h->post_end = h->end + after;
 
-    h->type = NGX_HUNK_TEMP;
+    h->type = NGX_HUNK_TEMP|NGX_HUNK_IN_MEMORY;
     h->tag = 0;
     h->file = NULL;
 
@@ -32,26 +30,24 @@
 
     ngx_test_null(h, ngx_palloc(pool, sizeof(ngx_hunk_t)), NULL);
 
-#if !(HAVE_OFFSET_EQUAL_PTR)
-    h->pos.file = h->last.file = 0;
-#endif
- 
-    if (hunk->type & NGX_HUNK_TEMP && hunk->pos.mem - hunk->pre_start >= size) {
+    if (hunk->type & NGX_HUNK_TEMP && hunk->pos - hunk->pre_start >= size) {
         /* keep hunk->start unchanged - used in restore */
         h->pre_start = hunk->pre_start;
-        h->end = h->post_end = hunk->pre_start = hunk->pos.mem;
-        h->start = h->pos.mem = h->last.mem = h->end - size;
+        h->end = h->post_end = hunk->pre_start = hunk->pos;
+        h->start = h->pos = h->last = h->end - size;
+        h->file_pos = h->file_last = 0;
 
-        h->type = NGX_HUNK_TEMP;
+        h->type = NGX_HUNK_TEMP|NGX_HUNK_IN_MEMORY;
         h->tag = 0;
         h->file = NULL;
 
     } else {
         ngx_test_null(h->pre_start, ngx_palloc(pool, size), NULL);
-        h->start = h->pos.mem = h->last.mem = h->pre_start; 
+        h->start = h->pos = h->last = h->pre_start; 
         h->end = h->post_end = h->start + size;
+        h->file_pos = h->file_last = 0;
 
-        h->type = NGX_HUNK_TEMP;
+        h->type = NGX_HUNK_TEMP|NGX_HUNK_IN_MEMORY;
         h->tag = 0;
         h->file = NULL;
     }
@@ -65,27 +61,26 @@
 
     ngx_test_null(h, ngx_palloc(pool, sizeof(ngx_hunk_t)), NULL);
 
-#if !(HAVE_OFFSET_EQUAL_PTR)
-    h->pos.file = h->last.file = 0;
-#endif
-
     if (hunk->type & NGX_HUNK_TEMP
-        && hunk->last.mem == hunk->end
+        && hunk->last == hunk->end
         && hunk->post_end - hunk->end >= size)
     {
         h->post_end = hunk->post_end;
-        h->pre_start = h->start = h->pos.mem = h->last.mem = hunk->post_end =
-                                                                hunk->last.mem;
-        h->type = NGX_HUNK_TEMP;
+        h->pre_start = h->start = h->pos = h->last = hunk->post_end =
+                                                                hunk->last;
+        h->file_pos = h->file_last = 0;
+
+        h->type = NGX_HUNK_TEMP|NGX_HUNK_IN_MEMORY;
         h->tag = 0;
         h->file = NULL;
 
     } else {
         ngx_test_null(h->pre_start, ngx_palloc(pool, size), NULL);
-        h->start = h->pos.mem = h->last.mem = h->pre_start; 
+        h->start = h->pos = h->last = h->pre_start; 
         h->end = h->post_end = h->start + size;
+        h->file_pos = h->file_last = 0;
 
-        h->type = NGX_HUNK_TEMP;
+        h->type = NGX_HUNK_TEMP|NGX_HUNK_IN_MEMORY;
         h->tag = 0;
         h->file = NULL;
     }
diff --git a/src/core/ngx_hunk.h b/src/core/ngx_hunk.h
index 2e16450..f5068c0 100644
--- a/src/core/ngx_hunk.h
+++ b/src/core/ngx_hunk.h
@@ -10,34 +10,34 @@
 
 /* hunk type */
 
-/* temp means that hunk's content can be changed */
-/* other type means that hunk's content can not be changed */
-#define NGX_HUNK_TEMP       0x0001
-#define NGX_HUNK_MEMORY     0x0002
-#define NGX_HUNK_MMAP       0x0004
-#define NGX_HUNK_FILE       0x0008
+/* the hunk is in memory */
+#define NGX_HUNK_IN_MEMORY  0x0001
+/* the hunk's content can be changed */
+#define NGX_HUNK_TEMP       0x0002
+/* the hunk's content is in cache and can not be changed */
+#define NGX_HUNK_MEMORY     0x0004
+/* the hunk's content is mmap()ed and can not be changed */
+#define NGX_HUNK_MMAP       0x0008
+
+#define NGX_HUNK_RECYCLED   0x0010
+
+/* the hunk is in file */
+#define NGX_HUNK_FILE       0x0100
 
 /* hunk flags */
 
 /* in thread state flush means to write the hunk completely before return */
 /* in event state flush means to start to write the hunk */
-#define NGX_HUNK_FLUSH      0x0100
+#define NGX_HUNK_FLUSH      0x1000
 /* last hunk */
-#define NGX_HUNK_LAST       0x0200
-#if 0
-/* can be used with NGX_HUNK_LAST only */
-#define NGX_HUNK_SHUTDOWN   0x0400 /
-#endif
+#define NGX_HUNK_LAST       0x2000
 
-#define NGX_HUNK_RECYCLED   0x0800
-
-
-#define NGX_HUNK_IN_MEMORY  (NGX_HUNK_TEMP|NGX_HUNK_MEMORY|NGX_HUNK_MMAP)
 
 
 
 typedef struct ngx_hunk_s ngx_hunk_t;
 struct ngx_hunk_s {
+#if 0
     union {
         char    *mem;           /* start of current data */
         off_t    file;   
@@ -46,6 +46,13 @@
         char    *mem;           /* end of current data */
         off_t    file;   
     } last;
+#endif
+
+    char        *pos;
+    char        *last;
+    off_t        file_pos;
+    off_t        file_last;
+
     int          type;
     char        *start;         /* start of hunk */
     char        *end;           /* end of hunk */
@@ -67,6 +74,10 @@
 #define NGX_CHAIN_ERROR     (ngx_chain_t *) NGX_ERROR
 
 
+#define ngx_hunk_in_memory_only(h)                                           \
+         ((h->type & (NGX_HUNK_IN_MEMORY|NGX_HUNK_FILE)) == NGX_HUNK_IN_MEMORY)
+
+
 ngx_hunk_t *ngx_create_temp_hunk(ngx_pool_t *pool, int size,
                                  int before, int after);
 
diff --git a/src/core/ngx_string.h b/src/core/ngx_string.h
index 83ca4ba..c9d5d80 100644
--- a/src/core/ngx_string.h
+++ b/src/core/ngx_string.h
@@ -12,6 +12,7 @@
 
 
 #define ngx_string(str)  { sizeof(str) - 1, str }
+#define ngx_null_string  { 0, NULL }
 
 
 #if (WIN32)