nginx-0.0.1-2003-04-28-19:06:39 import
diff --git a/src/core/nginx.c b/src/core/nginx.c
index 36a28f8..30c0680 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -89,6 +89,8 @@
         return 1;
     }
 
+    ngx_init_temp_number();
+
     for (i = 0; ngx_modules[i]; i++) {
         if (ngx_modules[i]->init_module) {
             if (ngx_modules[i]->init_module(ngx_pool) == NGX_ERROR) {
@@ -97,14 +99,6 @@
         }
     }
 
-
-#if 0
-    /* STUB */
-    /* TODO: init chain of global modules (like ngx_http.c),
-       they would init its modules and ngx_listening_sockets */
-    ngx_http_init(ngx_pool, &ngx_log);
-#endif
-
     ngx_open_listening_sockets(&ngx_log);
 
     /* TODO: daemon */
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index 12537bd..45533be 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -432,16 +432,34 @@
 
 char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
 {
-    int         size;
+    int         size, len, scale;
+    char        last;
     ngx_str_t  *value;
 
     value = (ngx_str_t *) cf->args->elts;
 
-    size = atoi(value[1].data);
-    if (size < 0) {
+    len = value[1].len;
+    last = value[1].data[len - 1];
+
+    if (last == 'K' || last == 'k') {
+        len--;
+        scale = 1024;
+
+    } else if (last == 'M' || last == 'm') {
+        len--;
+        scale = 1024 * 1024;
+
+    } else {
+        scale = 1;
+    }
+
+    size = ngx_atoi(value[1].data, len);
+    if (size == NGX_ERROR) {
         return "value must be greater or equal to zero";
     }
 
+    size *= scale;
+
     *(int *) (conf + cmd->offset) = size;
 
     return NGX_CONF_OK;
@@ -450,17 +468,65 @@
 
 char *ngx_conf_set_time_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf)
 {
-    int         size;
+    int         size, len, scale;
+    char        last;
     ngx_str_t  *value;
 
     value = (ngx_str_t *) cf->args->elts;
 
-    size = atoi(value[1].data);
+    len = value[1].len;
+    last = value[1].data[len - 1];
+
+    if (last == 'm') {
+        len--;
+        scale = 1000 * 60;
+
+    } else if (last == 'h') {
+        len--;
+        scale = 1000 * 60 * 60;
+
+    } else if (last == 'd') {
+        len--;
+        scale = 1000 * 60 * 60 * 24;
+
+    } else if (last == 'w') {
+        len--;
+        scale = 1000 * 60 * 60 * 24 * 7;
+
+#if 0   /* overflow */
+
+    } else if (last == 'M') {
+        len--;
+        scale = 1000 * 60 * 60 * 24 * 30;
+
+    } else if (last == 'y') {
+        len--;
+        scale = 1000 * 60 * 60 * 24 * 365;
+
+#endif
+
+    } else if (last == 's') {
+        len--;
+        if (value[1].data[len - 1] == 'm') {
+            len--;
+            scale = 1;
+
+        } else {
+            scale = 1000;
+        }
+
+    } else {
+        scale = 1000;
+    }
+
+    size = ngx_atoi(value[1].data, len);
     if (size < 0) {
         return "value must be greater or equal to zero";
     }
 
-    *(int *) (conf + cmd->offset) = size * 1000;
+    size *= scale;
+
+    *(int *) (conf + cmd->offset) = size;
 
     return NGX_CONF_OK;
 }
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index beb148a..f6c9e02 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -45,6 +45,7 @@
     char    *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, char *conf);
     int        conf;
     int        offset;
+    void      *bounds;
 };
 
 
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
index 7576c9b..b8f15e1 100644
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -7,10 +7,14 @@
 #include <ngx_files.h>
 
 
+static int ngx_temp_number;
+static int ngx_random;
+
+
 int ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path,
-                         ngx_pool_t *pool, int num, int step, int persistent)
+                         ngx_pool_t *pool, int persistent)
 {
-    int        i;
+    int        i, num;
     ngx_err_t  err;
 
     file->name.len = path->name.len + 1 + path->len + 10;
@@ -26,6 +30,8 @@
 
     ngx_memcpy(file->name.data, path->name.data, path->name.len);
 
+    num = ngx_next_temp_number(0);
+
     for ( ;; ) {
         snprintf(file->name.data + path->name.len + 1 + path->len, 11,
                  "%010u", num);
@@ -58,7 +64,7 @@
         err = ngx_errno;
 
         if (err == NGX_EEXIST) {
-            num = (num + 1) * step;
+            num = ngx_next_temp_number(1);
             continue;
         }
 
@@ -140,3 +146,25 @@
 
     return NGX_OK;
 }
+
+
+void ngx_init_temp_number()
+{
+    ngx_random = 0;
+
+    ngx_temp_number = ngx_random;
+
+    while (ngx_random < 10000) {
+        ngx_random = 123456;
+    }
+}
+
+
+int ngx_next_temp_number(int collision)
+{
+    if (collision) {
+        ngx_temp_number += ngx_random;
+    }
+
+    return ngx_temp_number++;
+}
diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h
index d073848..2cd2f76 100644
--- a/src/core/ngx_file.h
+++ b/src/core/ngx_file.h
@@ -30,10 +30,12 @@
 
 
 int ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path,
-                         ngx_pool_t *pool, int num, int step, int persistent);
+                         ngx_pool_t *pool, int persistent);
 void ngx_create_hashed_filename(ngx_file_t *file, ngx_path_t *path);
 int ngx_create_path(ngx_file_t *file, ngx_path_t *path);
 
+void ngx_init_temp_number();
+int ngx_next_temp_number(int collision);
 
 
 #endif /* _NGX_FILE_H_INCLUDED_ */
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 30e42ad..4057d7a 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -4,7 +4,7 @@
 */
 
 /*
-   "[time as ctime()] [alert] 412:3 (32)Broken pipe: anything"
+   "[time as ctime()] [alert] 412#3 (32)Broken pipe: anything"
 
    "[time as ctime()] [alert] (32)Broken pipe: anything"
    "[time as ctime()] [alert] anything"
@@ -58,14 +58,19 @@
 #endif
 
     if (err) {
+
 #if (WIN32)
-        if ((unsigned) err >= 0x80000000)
+        if ((unsigned) err >= 0x80000000) {
             len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
                                 " (%X: ", err);
-        else
-#endif
+        } else {
             len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
                                 " (%d: ", err);
+        }
+#else
+        len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
+                            " (%d: ", err);
+#endif
 
         len += ngx_strerror_r(err, errstr + len, sizeof(errstr) - len - 1);
         if (len < sizeof(errstr) - 2) {
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
index 4beb11d..1510498 100644
--- a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -27,14 +27,18 @@
     int  value;
 
     for (value = 0; n--; line++) {
-       if (*line < '0' || *line > '9') {
-           return NGX_ERROR;
-       }
+        if (*line < '0' || *line > '9') {
+            return NGX_ERROR;
+        }
 
-       value = value * 10 + (*line - '0');
+        value = value * 10 + (*line - '0');
     }
 
-    return value;
+    if (value < 0) {
+        return NGX_ERROR;
+    } else {
+        return value;
+    }
 }