nginx-0.1.8-RELEASE import

    *) Bugfix: in the ngx_http_autoindex_module if the long file names were
       in the listing.

    *) Feature: the "^~" modifier in the location directive.

    *) Feature: the proxy_max_temp_file_size directive.
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 529c43d..5f2339b 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define NGINX_VER          "nginx/0.1.7"
+#define NGINX_VER          "nginx/0.1.8"
 
 #define NGINX_VAR          "NGINX"
 #define NGX_NEWPID_EXT     ".newbin"
diff --git a/src/core/ngx_array.h b/src/core/ngx_array.h
index 826395d..931c7fb 100644
--- a/src/core/ngx_array.h
+++ b/src/core/ngx_array.h
@@ -26,7 +26,7 @@
 void *ngx_push_array(ngx_array_t *a);
 
 
-ngx_inline static ngx_int_t ngx_array_init(ngx_array_t *array, ngx_pool_t *pool,
+static ngx_inline ngx_int_t ngx_array_init(ngx_array_t *array, ngx_pool_t *pool,
                                            ngx_uint_t n, size_t size)
 {
     if (!(array->elts = ngx_palloc(pool, n * size))) {
diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h
index 9faf00a..43fd985 100644
--- a/src/core/ngx_config.h
+++ b/src/core/ngx_config.h
@@ -109,7 +109,7 @@
 
 /* TODO: auto_conf: ngx_inline   inline __inline __inline__ */
 #ifndef ngx_inline
-#define ngx_inline   inline
+#define ngx_inline   __inline
 #endif
 
 #define NGX_ACCEPT_THRESHOLD   100
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index 06fd85c..631cd4f 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -299,7 +299,7 @@
             }
         }
 
-        if (ngx_close_socket(ls[i].fd) == -1) {
+        if (ngx_close_socket(fd) == -1) {
             ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno,
                           ngx_close_socket_n " %V failed", &ls[i].addr_text);
         }
diff --git a/src/core/ngx_crc.h b/src/core/ngx_crc.h
index b78f479..73f4cdd 100644
--- a/src/core/ngx_crc.h
+++ b/src/core/ngx_crc.h
@@ -10,7 +10,7 @@
 
 /* 32-bit crc16 */
 
-ngx_inline static uint32_t ngx_crc(char *data, size_t len)
+static ngx_inline uint32_t ngx_crc(char *data, size_t len)
 {
     uint32_t  sum;
 
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index 85d9458..d91ba85 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -49,6 +49,8 @@
     ngx_list_part_t    *part;
     ngx_open_file_t    *file;
     ngx_listening_t    *ls, *nls;
+    ngx_core_conf_t    *ccf;
+    ngx_event_conf_t   *ecf;
     ngx_core_module_t  *module;
 
     log = old_cycle->log;
@@ -204,6 +206,16 @@
 
 
     if (!failed) {
+         ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx,
+                                                ngx_core_module);
+
+        if (ngx_create_pathes(cycle, ccf->user) == NGX_ERROR) {
+            failed = 1;
+        }
+    }
+
+
+    if (!failed) {
 
         /* open the new files */
 
@@ -421,6 +433,13 @@
         }
     }
 
+
+    ecf = ngx_event_get_conf(cycle->conf_ctx, ngx_event_core_module);
+
+    ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
+                  "using the \"%s\" event method", ecf->name);
+
+
     /* close and delete stuff that lefts from an old cycle */
 
     /* close the unneeded listening sockets */
@@ -697,16 +716,6 @@
         }
 #else
         if (user != (ngx_uid_t) -1) {
-            if (chown((const char *) file[i].name.data, user, -1) == -1) {
-                ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
-                              "chown \"%s\" failed", file[i].name.data);
-
-                if (ngx_close_file(fd) == NGX_FILE_ERROR) {
-                    ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
-                                  ngx_close_file_n " \"%s\" failed",
-                                  file[i].name.data);
-                }
-            }
 
             if (ngx_file_info((const char *) file[i].name.data, &fi) == -1) {
                 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
@@ -720,14 +729,27 @@
                 }
             }
 
+            if (fi.st_uid != user) {
+                if (chown((const char *) file[i].name.data, user, -1) == -1) {
+                    ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
+                                  "chown(\"%s\", %d) failed",
+                                  file[i].name.data, user);
+
+                    if (ngx_close_file(fd) == NGX_FILE_ERROR) {
+                        ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
+                                      ngx_close_file_n " \"%s\" failed",
+                                      file[i].name.data);
+                    }
+                }
+            }
+
             if ((fi.st_mode & (S_IRUSR|S_IWUSR)) != (S_IRUSR|S_IWUSR)) {
 
                 fi.st_mode |= (S_IRUSR|S_IWUSR);
 
                 if (chmod((const char *) file[i].name.data, fi.st_mode) == -1) {
                     ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
-                                  "chmod \"%s\" failed",
-                                  file[i].name.data);
+                                  "chmod() \"%s\" failed", file[i].name.data);
 
                     if (ngx_close_file(fd) == NGX_FILE_ERROR) {
                         ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
index 8e1edbd..08d9aba 100644
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -12,9 +12,9 @@
 static ngx_uint_t ngx_random;
 
 
-int ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain)
+ssize_t ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain)
 {
-    int  rc;
+    ngx_int_t  rc;
 
     if (tf->file.fd == NGX_INVALID_FILE) {
         rc = ngx_create_temp_file(&tf->file, tf->path, tf->pool,
@@ -33,16 +33,17 @@
 }
 
 
-int ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path,
-                         ngx_pool_t *pool, int persistent)
+ngx_int_t ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path,
+                               ngx_pool_t *pool, int persistent)
 {
-    int        num;
-    ngx_err_t  err;
+    ngx_err_t   err;
+    uint32_t    num;
 
     file->name.len = path->name.len + 1 + path->len + 10;
 
-    ngx_test_null(file->name.data, ngx_palloc(pool, file->name.len + 1),
-                  NGX_ERROR);
+    if (!(file->name.data = ngx_palloc(pool, file->name.len + 1))) {
+        return NGX_ERROR;
+    }
 
 #if 0
     for (i = 0; i < file->name.len; i++) {
@@ -52,11 +53,11 @@
 
     ngx_memcpy(file->name.data, path->name.data, path->name.len);
 
-    num = ngx_next_temp_number(0);
+    num = (uint32_t) ngx_next_temp_number(0);
 
     for ( ;; ) {
         ngx_sprintf(file->name.data + path->name.len + 1 + path->len,
-                    "%010ud%Z", num);
+                    "%010ui%Z", num);
 
         ngx_create_hashed_filename(file, path);
 
@@ -85,7 +86,8 @@
 #if (NGX_WIN32)
                 && err != NGX_ENOTDIR
 #endif
-        )) {
+            ))
+        {
             ngx_log_error(NGX_LOG_CRIT, file->log, err,
                           ngx_open_tempfile_n " \"%s\" failed",
                           file->name.data);
@@ -101,8 +103,7 @@
 
 void ngx_create_hashed_filename(ngx_file_t *file, ngx_path_t *path)
 {
-    int     i, name, pos;
-    size_t  level;
+    ngx_uint_t  i, name, pos, level;
 
     name = file->name.len;
     pos = path->name.len + 1;
@@ -127,7 +128,7 @@
 }
 
 
-int ngx_create_path(ngx_file_t *file, ngx_path_t *path)
+ngx_int_t ngx_create_path(ngx_file_t *file, ngx_path_t *path)
 {
     int        i, pos;
     ngx_err_t  err;
@@ -189,32 +190,28 @@
 {
     char  *p = conf;
 
-    ngx_int_t    level;
+    ssize_t      level;
     ngx_uint_t   i, n;
     ngx_str_t   *value;
-    ngx_path_t  *path, **pp;
+    ngx_path_t  *path, **pp, **slot;
 
-    pp = (ngx_path_t **) (p + cmd->offset);
+    slot = (ngx_path_t **) (p + cmd->offset);
 
-    if (*pp) {
+    if (*slot) {
         return "is duplicate";
     }
 
-    /* TODO: check duplicate in cf->cycle->pathes */
+    if (!(path = ngx_pcalloc(cf->pool, sizeof(ngx_path_t)))) {
+        return NGX_CONF_ERROR;
+    }
 
-    ngx_test_null(path, ngx_pcalloc(cf->pool, sizeof(ngx_path_t)),
-                  NGX_CONF_ERROR);
-
-    *pp = path;
-
-    ngx_test_null(pp, ngx_push_array(&cf->cycle->pathes), NGX_CONF_ERROR);
-    *pp = path;
-
-    value = (ngx_str_t *) cf->args->elts;
+    value = cf->args->elts;
 
     path->name = value[1];
-
     path->len = 0;
+    path->gc_handler = (ngx_gc_handler_pt) cmd->post;
+    path->conf_file = cf->conf_file->file.name.data;
+    path->line = cf->conf_file->line;
 
     for (i = 0, n = 2; n < cf->args->nelts; i++, n++) {
         level = ngx_atoi(value[n].data, value[n].len);
@@ -230,7 +227,102 @@
         path->level[i++] = 0;
     }
 
-    path->gc_handler = (ngx_gc_handler_pt) cmd->post;
+
+    pp = cf->cycle->pathes.elts;
+    for (i = 0; i < cf->cycle->pathes.nelts; i++) {
+        if (pp[i]->name.len == path->name.len
+            && ngx_strcmp(pp[i]->name.data, path->name.data) == 0)
+        {
+            for (n = 0; n < 3; n++) {
+                if (pp[i]->level[n] != path->level[n]) {
+                    ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+                                   "the same \"%V\" path name in %s:%ui "
+                                   "has the different levels than",
+                                   &pp[i]->name, pp[i]->conf_file, pp[i]->line);
+                    return NGX_CONF_ERROR;
+                }
+
+                if (pp[i]->level[n] == 0) {
+                    break;
+                }
+            }
+
+            *slot = pp[i];
+
+            return NGX_CONF_OK;
+        }
+    }
+
+    *slot = path;
+
+
+    if (!(pp = ngx_array_push(&cf->cycle->pathes))) {
+        return NGX_CONF_ERROR;
+    }
+
+    *pp = path;
 
     return NGX_CONF_OK;
 }
+
+
+ngx_int_t ngx_create_pathes(ngx_cycle_t *cycle, ngx_uid_t user)
+{
+    ngx_err_t         err;
+    ngx_uint_t        i;
+    ngx_path_t      **path;
+#if !(NGX_WIN32)
+    ngx_file_info_t   fi;
+#endif
+
+    path = cycle->pathes.elts;
+    for (i = 0; i < cycle->pathes.nelts; i++) {
+
+        if (ngx_create_dir(path[i]->name.data) == NGX_FILE_ERROR) {
+            err = ngx_errno;
+            if (err != NGX_EEXIST) {
+                ngx_log_error(NGX_LOG_EMERG, cycle->log, err,
+                              ngx_create_dir_n " \"%s\" failed",
+                              path[i]->name.data);
+                return NGX_ERROR;
+            }
+        }
+
+        if (user == (ngx_uid_t) -1) {
+            continue;
+        }
+
+#if !(NGX_WIN32)
+
+        if (ngx_file_info((const char *) path[i]->name.data, &fi) == -1) {
+            ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
+                          ngx_file_info_n " \"%s\" failed", path[i]->name.data);
+            return NGX_ERROR;
+        }
+
+        if (fi.st_uid != user) {
+            if (chown((const char *) path[i]->name.data, user, -1) == -1) {
+                ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
+                              "chown(\"%s\", %d) failed",
+                              path[i]->name.data, user);
+                return NGX_ERROR;
+            }
+        }
+
+        if ((fi.st_mode & (S_IRUSR|S_IWUSR|S_IXUSR))
+                                                  != (S_IRUSR|S_IWUSR|S_IXUSR))
+        {
+            fi.st_mode |= (S_IRUSR|S_IWUSR|S_IXUSR);
+
+            if (chmod((const char *) path[i]->name.data, fi.st_mode) == -1) {
+                ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
+                              "chmod() \"%s\" failed", path[i]->name.data);
+                return NGX_ERROR;
+            }
+        }
+
+#endif
+    }
+
+    return NGX_OK;
+}
diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h
index d05b6d7..94fd8c7 100644
--- a/src/core/ngx_file.h
+++ b/src/core/ngx_file.h
@@ -17,44 +17,48 @@
 
 
 struct ngx_file_s {
-    ngx_fd_t         fd;
-    ngx_str_t        name;
-    ngx_file_info_t  info;
+    ngx_fd_t            fd;
+    ngx_str_t           name;
+    ngx_file_info_t     info;
 
-    off_t            offset;
-    off_t            sys_offset;
+    off_t               offset;
+    off_t               sys_offset;
 
-    ngx_log_t       *log;
+    ngx_log_t          *log;
 
-    ngx_uint_t       valid_info:1;  /* unsigned  valid_info:1; */
+    ngx_uint_t          valid_info:1;  /* unsigned  valid_info:1; */
 };
 
 #define NGX_MAX_PATH_LEVEL  3
 
 struct ngx_path_s {
     ngx_str_t           name;
-    u_int               len;
-    u_int               level[3];
+    ngx_uint_t          len;
+    ngx_uint_t          level[3];
     ngx_gc_handler_pt   gc_handler;
+
+    u_char             *conf_file;
+    ngx_uint_t          line;
 };
 
 
 typedef struct {
-    ngx_file_t   file;
-    off_t        offset;
-    ngx_path_t  *path;
-    ngx_pool_t  *pool;
-    char        *warn;
+    ngx_file_t          file;
+    off_t               offset;
+    ngx_path_t         *path;
+    ngx_pool_t         *pool;
+    char               *warn;
 
-    unsigned     persistent:1;
+    unsigned            persistent:1;
 } ngx_temp_file_t;
 
 
-int ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain);
-int ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path,
-                         ngx_pool_t *pool, int persistent);
+ssize_t ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain);
+ngx_int_t ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path,
+                               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);
+ngx_int_t ngx_create_path(ngx_file_t *file, ngx_path_t *path);
+ngx_int_t ngx_create_pathes(ngx_cycle_t *cycle, ngx_uid_t user);
 
 void ngx_init_temp_number();
 ngx_uint_t ngx_next_temp_number(ngx_uint_t collision);
diff --git a/src/core/ngx_garbage_collector.c b/src/core/ngx_garbage_collector.c
index 73f9cc1..fb6ad77 100644
--- a/src/core/ngx_garbage_collector.c
+++ b/src/core/ngx_garbage_collector.c
@@ -9,71 +9,8 @@
 #include <ngx_garbage_collector.h>
 
 
-int ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
-                                       ngx_dir_t *dir);
 
-
-static int ngx_collect_garbage(ngx_gc_t *ctx, ngx_str_t *dname, int level);
-
-
-
-#if 0
-
-{
-    ngx_test_null(cycle->timer_events,
-                  ngx_alloc(sizeof(ngx_event_t) * TIMERS, cycle->log),
-                  NGX_ERROR);
-
-    ngx_event_timer_init(cycle);
-}
-
-
-void garbage_collector()
-{
-    ngx_msec_t        timer;
-    struct timeval    tv;
-    ngx_epoch_msec_t  delta;
-
-    for ( ;; ) {
-        timer = ngx_event_find_timer();
-
-        ngx_gettimeofday(&tv);
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
-
-        msleep(timer);
-
-        ngx_gettimeofday(&tv);
-
-        ngx_cached_time = tv.tv_sec;
-        ngx_time_update();
-
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta;
-
-        ngx_event_expire_timers((ngx_msec_t) delta);
-    }
-}
-
-#endif
-
-
-void stub_init(ngx_cycle_t *cycle)
-{
-    ngx_uint_t    i;
-    ngx_gc_t      ctx;
-    ngx_path_t  **path;
-
-    path = cycle->pathes.elts;
-    for (i = 0; i < cycle->pathes.nelts; i++) {
-        ctx.path = path[i];
-        ctx.log = cycle->log;
-        ctx.handler = path[i]->gc_handler;
-
-        ngx_collect_garbage(&ctx, &path[i]->name, 0);
-    }
-}
-
-
-static int ngx_collect_garbage(ngx_gc_t *ctx, ngx_str_t *dname, int level)
+ngx_int_t ngx_collect_garbage(ngx_gc_t *ctx, ngx_str_t *dname, int level)
 {
     int         rc;
     u_char     *last;
@@ -224,7 +161,8 @@
 
         } else {
             ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
-                          "\"%s\" has unknown file type, deleting", fname.data);
+                          "the file \"%s\" has unknown type, deleting",
+                          fname.data);
 
             if (ngx_delete_file(fname.data) == NGX_FILE_ERROR) {
                 ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
@@ -249,8 +187,8 @@
 }
 
 
-int ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
-                                       ngx_dir_t *dir)
+ngx_int_t ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
+                                             ngx_dir_t *dir)
 {
     /*
      * We use mtime only and do not use atime because:
@@ -264,7 +202,7 @@
     }
 
     ngx_log_error(NGX_LOG_NOTICE, ctx->log, 0,
-                  "delete stale temporary \"%s\"", name->data);
+                  "delete the stale temporary file \"%s\"", name->data);
 
     if (ngx_delete_file(name->data) == NGX_FILE_ERROR) {
         ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
diff --git a/src/core/ngx_garbage_collector.h b/src/core/ngx_garbage_collector.h
index 72f9760..cec3a87 100644
--- a/src/core/ngx_garbage_collector.h
+++ b/src/core/ngx_garbage_collector.h
@@ -23,8 +23,9 @@
 };
 
 
-int ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
-                                       ngx_dir_t *dir);
+ngx_int_t ngx_collect_garbage(ngx_gc_t *ctx, ngx_str_t *dname, int level);
+ngx_int_t ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
+                                             ngx_dir_t *dir);
 
 
 #endif /* _NGX_GARBAGE_COLLECTOR_H_INCLUDED_ */
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index 5cabb49..22a5334 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -20,7 +20,7 @@
  */
 
 
-ngx_inline static size_t ngx_sprint_uchar(u_char *text, u_char c, size_t len)
+static ngx_inline size_t ngx_sprint_uchar(u_char *text, u_char c, size_t len)
 {
     size_t      n;
     ngx_uint_t  c1, c2;
diff --git a/src/core/ngx_list.h b/src/core/ngx_list.h
index 046bdee..2dd8ab3 100644
--- a/src/core/ngx_list.h
+++ b/src/core/ngx_list.h
@@ -30,7 +30,7 @@
 } ngx_list_t;
 
 
-ngx_inline static ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool,
+static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool,
                                           ngx_uint_t n, size_t size)
 {
     if (!(list->part.elts = ngx_palloc(pool, n * size))) {
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 521ba7a..b7198cd 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -155,8 +155,15 @@
 
     errstr[len++] = CR;
     errstr[len++] = LF;
+
     WriteFile(log->file->fd, errstr, len, &written, NULL);
 
+#if 0
+    if (WriteFile(log->file->fd, errstr, len, &written, NULL) == 0) {
+        ngx_message_box("nginx", MB_OK, ngx_errno, "WriteFile() failed");
+    }
+#endif
+
 #else
 
     if (len == NGX_MAX_ERROR_STR) {
@@ -164,6 +171,7 @@
     }
 
     errstr[len++] = LF;
+
     write(log->file->fd, errstr, len);
 
 #endif
diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c
index 30dda35..d2fbf12 100644
--- a/src/core/ngx_output_chain.c
+++ b/src/core/ngx_output_chain.c
@@ -12,7 +12,7 @@
 #define NGX_NONE      1
 
 
-ngx_inline static ngx_int_t
+static ngx_inline ngx_int_t
     ngx_output_chain_need_to_copy(ngx_output_chain_ctx_t *ctx, ngx_buf_t *buf);
 static ngx_int_t ngx_output_chain_copy_buf(ngx_buf_t *dst, ngx_buf_t *src,
                                            ngx_uint_t sendfile);
@@ -188,7 +188,7 @@
 }
 
 
-ngx_inline static ngx_int_t
+static ngx_inline ngx_int_t
     ngx_output_chain_need_to_copy(ngx_output_chain_ctx_t *ctx, ngx_buf_t *buf)
 {
     if (ngx_buf_special(buf)) {
diff --git a/src/core/ngx_rbtree.c b/src/core/ngx_rbtree.c
index c94db13..ef57289 100644
--- a/src/core/ngx_rbtree.c
+++ b/src/core/ngx_rbtree.c
@@ -20,12 +20,12 @@
 #define ngx_rbt_copy_color(n1, n2)  (n1->color = n2->color)
 
 
-ngx_inline void ngx_rbtree_left_rotate(ngx_rbtree_t **root,
-                                       ngx_rbtree_t *sentinel,
-                                       ngx_rbtree_t *node);
-ngx_inline void ngx_rbtree_right_rotate(ngx_rbtree_t **root,
-                                        ngx_rbtree_t *sentinel,
-                                        ngx_rbtree_t *node);
+static ngx_inline void ngx_rbtree_left_rotate(ngx_rbtree_t **root,
+                                              ngx_rbtree_t *sentinel,
+                                              ngx_rbtree_t *node);
+static ngx_inline void ngx_rbtree_right_rotate(ngx_rbtree_t **root,
+                                               ngx_rbtree_t *sentinel,
+                                               ngx_rbtree_t *node);
 
 
 void ngx_rbtree_insert(ngx_rbtree_t **root, ngx_rbtree_t *sentinel,
@@ -289,9 +289,9 @@
 }
 
 
-ngx_inline void ngx_rbtree_left_rotate(ngx_rbtree_t **root,
-                                       ngx_rbtree_t *sentinel,
-                                       ngx_rbtree_t *node)
+static ngx_inline void ngx_rbtree_left_rotate(ngx_rbtree_t **root,
+                                              ngx_rbtree_t *sentinel,
+                                              ngx_rbtree_t *node)
 {
     ngx_rbtree_t  *temp;
 
@@ -319,9 +319,9 @@
 }
 
 
-ngx_inline void ngx_rbtree_right_rotate(ngx_rbtree_t **root,
-                                        ngx_rbtree_t *sentinel,
-                                        ngx_rbtree_t *node)
+static ngx_inline void ngx_rbtree_right_rotate(ngx_rbtree_t **root,
+                                               ngx_rbtree_t *sentinel,
+                                               ngx_rbtree_t *node)
 {
     ngx_rbtree_t  *temp;
 
diff --git a/src/core/ngx_rbtree.h b/src/core/ngx_rbtree.h
index aa69556..d876ec0 100644
--- a/src/core/ngx_rbtree.h
+++ b/src/core/ngx_rbtree.h
@@ -29,7 +29,7 @@
                        ngx_rbtree_t *node);
 
 
-ngx_inline static ngx_rbtree_t *ngx_rbtree_min(ngx_rbtree_t *node,
+static ngx_inline ngx_rbtree_t *ngx_rbtree_min(ngx_rbtree_t *node,
                                                ngx_rbtree_t *sentinel)
 {
    while (node->left != sentinel) {
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
index 94eadfb..4e5d273 100644
--- a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -135,6 +135,11 @@
                     fmt++;
                     continue;
 
+                case 'm':
+                    width = NGX_INT_T_LEN;
+                    fmt++;
+                    continue;
+
                 case 'X':
                     hexadecimal = 2;
                     sign = 0;