diff --git a/src/core/nginx.c b/src/core/nginx.c
index d6ee9f6..e2a35dc 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -141,7 +141,8 @@
 
     ngx_pid = ngx_getpid();
 
-    if (!(log = ngx_log_init())) {
+    log = ngx_log_init();
+    if (log == NULL) {
         return 1;
     }
 
@@ -155,7 +156,8 @@
     init_cycle.log = log;
     ngx_cycle = &init_cycle;
 
-    if (!(init_cycle.pool = ngx_create_pool(1024, log))) {
+    init_cycle.pool = ngx_create_pool(1024, log);
+    if (init_cycle.pool == NULL) {
         return 1;
     }
 
@@ -255,9 +257,9 @@
 static ngx_int_t
 ngx_add_inherited_sockets(ngx_cycle_t *cycle)
 {
-    u_char              *p, *v, *inherited;
-    ngx_socket_t         s;
-    ngx_listening_t     *ls;
+    u_char           *p, *v, *inherited;
+    ngx_int_t         s;
+    ngx_listening_t  *ls;
 
     inherited = (u_char *) getenv(NGINX_VAR);
 
@@ -287,11 +289,12 @@
 
             v = p + 1;
 
-            if (!(ls = ngx_array_push(&cycle->listening))) {
+            ls = ngx_array_push(&cycle->listening);
+            if (ls == NULL) {
                 return NGX_ERROR;
             }
 
-            ls->fd = s;
+            ls->fd = (ngx_socket_t) s;
         }
     }
 
@@ -315,7 +318,7 @@
     ctx.argv = argv;
 
     var = ngx_alloc(sizeof(NGINX_VAR)
-                            + cycle->listening.nelts * (NGX_INT32_LEN + 1) + 2,
+                    + cycle->listening.nelts * (NGX_INT32_LEN + 1) + 2,
                     cycle->log);
 
     p = ngx_cpymem(var, NGINX_VAR "=", sizeof(NGINX_VAR));
@@ -411,27 +414,29 @@
 static ngx_int_t
 ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv)
 {
+#if (NGX_FREEBSD)
+
+    ngx_os_argv = (char **) argv;
+    ngx_argc = argc;
+    ngx_argv = (char **) argv;
+
+#else
     size_t     len;
     ngx_int_t  i;
 
     ngx_os_argv = (char **) argv;
-
     ngx_argc = argc;
 
-#if (NGX_FREEBSD)
-
-    ngx_argv = (char **) argv;
-
-#else
-
-    if (!(ngx_argv = ngx_alloc((argc + 1) * sizeof(char *), cycle->log))) {
+    ngx_argv = ngx_alloc((argc + 1) * sizeof(char *), cycle->log);
+    if (ngx_argv == NULL) {
         return NGX_ERROR;
     }
 
     for (i = 0; i < argc; i++) {
         len = ngx_strlen(argv[i]) + 1;
 
-        if (!(ngx_argv[i] = ngx_alloc(len, cycle->log))) {
+        ngx_argv[i] = ngx_alloc(len, cycle->log);
+        if (ngx_argv[i] == NULL) {
             return NGX_ERROR;
         }
 
@@ -451,7 +456,8 @@
 {
     ngx_core_conf_t  *ccf;
 
-    if (!(ccf = ngx_pcalloc(cycle->pool, sizeof(ngx_core_conf_t)))) {
+    ccf = ngx_pcalloc(cycle->pool, sizeof(ngx_core_conf_t));
+    if (ccf == NULL) {
         return NULL;
     }
 
@@ -534,7 +540,8 @@
 
     ccf->newpid.len = ccf->pid.len + sizeof(NGX_NEWPID_EXT);
 
-    if (!(ccf->newpid.data = ngx_palloc(cycle->pool, ccf->newpid.len))) {
+    ccf->newpid.data = ngx_palloc(cycle->pool, ccf->newpid.len);
+    if (ccf->newpid.data == NULL) {
         return NGX_CONF_ERROR;
     }
 
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 5f76b9b..54afca9 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.24"
+#define NGINX_VER          "nginx/0.1.25"
 
 #define NGINX_VAR          "NGINX"
 #define NGX_NEWPID_EXT     ".newbin"
diff --git a/src/core/ngx_array.c b/src/core/ngx_array.c
index 82d5d1d..b6167af 100644
--- a/src/core/ngx_array.c
+++ b/src/core/ngx_array.c
@@ -12,11 +12,13 @@
 {
     ngx_array_t *a;
 
-    if (!(a = ngx_palloc(p, sizeof(ngx_array_t)))) {
+    a = ngx_palloc(p, sizeof(ngx_array_t));
+    if (a == NULL) {
         return NULL;
     }
 
-    if (!(a->elts = ngx_palloc(p, n * size))) {
+    a->elts = ngx_palloc(p, n * size);
+    if (a->elts == NULL) {
         return NULL;
     }
 
@@ -72,7 +74,8 @@
         } else {
             /* allocate a new array */
 
-            if (!(new = ngx_palloc(p, 2 * size))) {
+            new = ngx_palloc(p, 2 * size);
+            if (new == NULL) {
                 return NULL;
             }
 
@@ -120,7 +123,8 @@
 
             nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
 
-            if (!(new = ngx_palloc(p, nalloc * a->size))) {
+            new = ngx_palloc(p, nalloc * a->size);
+            if (new == NULL) {
                 return NULL;
             }
 
diff --git a/src/core/ngx_array.h b/src/core/ngx_array.h
index d90cf76..5f97451 100644
--- a/src/core/ngx_array.h
+++ b/src/core/ngx_array.h
@@ -27,10 +27,11 @@
 void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t n);
 
 
-static ngx_inline ngx_int_t ngx_array_init(ngx_array_t *array, ngx_pool_t *pool,
-                                           ngx_uint_t n, size_t size)
+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))) {
+    array->elts = ngx_palloc(pool, n * size);
+    if (array->elts == NULL) {
         return NGX_ERROR;
     }
 
@@ -43,14 +44,4 @@
 }
 
 
-/* STUB */
-#define ngx_init_array(a, p, n, s, rc)                                       \
-    ngx_test_null(a.elts, ngx_palloc(p, n * s), rc);                         \
-    a.nelts = 0; a.size = s; a.nalloc = n; a.pool = p;
-
-#define ngx_create_array  ngx_array_create
-#define ngx_push_array    ngx_array_push
-/**/
-
-
 #endif /* _NGX_ARRAY_H_INCLUDED_ */
diff --git a/src/core/ngx_buf.c b/src/core/ngx_buf.c
index 97c94a3..2f0356f 100644
--- a/src/core/ngx_buf.c
+++ b/src/core/ngx_buf.c
@@ -13,11 +13,13 @@
 {
     ngx_buf_t *b;
 
-    if (!(b = ngx_calloc_buf(pool))) {
+    b = ngx_calloc_buf(pool);
+    if (b == NULL) {
         return NULL;
     }
 
-    if (!(b->start = ngx_palloc(pool, size))) {
+    b->start = ngx_palloc(pool, size);
+    if (b->start == NULL) {
         return NULL;
     }
 
@@ -49,14 +51,17 @@
     ngx_buf_t    *b;
     ngx_chain_t  *chain, *cl, **ll;
 
-    if (!(p = ngx_palloc(pool, bufs->num * bufs->size))) {
+    p = ngx_palloc(pool, bufs->num * bufs->size);
+    if (p == NULL) {
         return NULL;
     }
 
     ll = &chain;
 
     for (i = 0; i < bufs->num; i++) {
-        if (!(b = ngx_calloc_buf(pool))) {
+
+        b = ngx_calloc_buf(pool);
+        if (b == NULL) {
             return NULL;
         }
 
@@ -79,7 +84,8 @@
         p += bufs->size;
         b->end = p;
 
-        if (!(cl = ngx_alloc_chain_link(pool))) {
+        cl = ngx_alloc_chain_link(pool);
+        if (cl == NULL) {
             return NULL;
         }
 
@@ -106,7 +112,10 @@
     }
 
     while (in) {
-        ngx_test_null(cl, ngx_alloc_chain_link(pool), NGX_ERROR);
+        cl = ngx_alloc_chain_link(pool);
+        if (cl == NULL) {
+            return NGX_ERROR;
+        }
 
         cl->buf = in->buf;
         *ll = cl;
diff --git a/src/core/ngx_buf.h b/src/core/ngx_buf.h
index d672cf4..721b9c2 100644
--- a/src/core/ngx_buf.h
+++ b/src/core/ngx_buf.h
@@ -119,27 +119,9 @@
 #define ngx_alloc_buf(pool)  ngx_palloc(pool, sizeof(ngx_buf_t))
 #define ngx_calloc_buf(pool) ngx_pcalloc(pool, sizeof(ngx_buf_t))
 
-
 #define ngx_alloc_chain_link(pool) ngx_palloc(pool, sizeof(ngx_chain_t))
 
 
-#define ngx_alloc_link_and_set_buf(chain, b, pool, error)                    \
-    do {                                                                     \
-        ngx_test_null(chain, ngx_alloc_chain_link(pool), error);             \
-        chain->buf = b;                                                      \
-        chain->next = NULL;                                                  \
-    } while (0);
-
-
-#define ngx_chain_add_link(chain, last, cl)                                  \
-    if (chain) {                                                             \
-        *last = cl;                                                          \
-    } else {                                                                 \
-        chain = cl;                                                          \
-    }                                                                        \
-    last = &cl->next
-
-
 ngx_int_t ngx_output_chain(ngx_output_chain_ctx_t *ctx, ngx_chain_t *in);
 ngx_int_t ngx_chain_writer(void *ctx, ngx_chain_t *in);
 
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index 437d7a2..653ff48 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -8,6 +8,7 @@
 #include <ngx_core.h>
 
 
+static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last);
 static char *ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
 
 
@@ -53,13 +54,10 @@
 
 char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
 {
-    int               m, rc, found, valid;
     char             *rv;
-    void             *conf, **confp;
     ngx_fd_t          fd;
-    ngx_str_t        *name;
+    ngx_int_t         rc;
     ngx_conf_file_t  *prev;
-    ngx_command_t    *cmd;
 
 #if (NGX_SUPPRESS_WARN)
     fd = NGX_INVALID_FILE;
@@ -78,7 +76,9 @@
         }
 
         prev = cf->conf_file;
-        if (!(cf->conf_file = ngx_palloc(cf->pool, sizeof(ngx_conf_file_t)))) {
+
+        cf->conf_file = ngx_palloc(cf->pool, sizeof(ngx_conf_file_t));
+        if (cf->conf_file == NULL) {
             return NGX_CONF_ERROR;
         }
 
@@ -130,194 +130,30 @@
             rv = (*cf->handler)(cf, NULL, cf->handler_conf);
             if (rv == NGX_CONF_OK) {
                 continue;
+            }
 
-            } else if (rv == NGX_CONF_ERROR) {
-                rc = NGX_ERROR;
-                break;
-
-            } else {
-                ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                             "%s in %s:%d",
-                             rv,
-                             cf->conf_file->file.name.data,
-                             cf->conf_file->line);
+            if (rv == NGX_CONF_ERROR) {
                 rc = NGX_ERROR;
                 break;
             }
-        }
 
-        name = (ngx_str_t *) cf->args->elts;
-        found = 0;
-
-        for (m = 0; rc != NGX_ERROR && !found && ngx_modules[m]; m++) {
-
-            /* look up the directive in the appropriate modules */
-
-            if (ngx_modules[m]->type != NGX_CONF_MODULE
-                && ngx_modules[m]->type != cf->module_type)
-            {
-                continue;
-            }
-
-            cmd = ngx_modules[m]->commands;
-            if (cmd == NULL) {
-                continue;
-            }
-
-            while (cmd->name.len) {
-                if (name->len == cmd->name.len
-                    && ngx_strcmp(name->data, cmd->name.data) == 0)
-                {
-
-                    found = 1;
-
-                    /* is the directive's location right ? */
-
-                    if ((cmd->type & cf->cmd_type) == 0) {
-                        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                                      "directive \"%s\" in %s:%d "
-                                      "is not allowed here",
-                                      name->data,
-                                      cf->conf_file->file.name.data,
-                                      cf->conf_file->line);
-                        rc = NGX_ERROR;
-                        break;
-                    }
-
-                    if (!(cmd->type & NGX_CONF_BLOCK) && rc != NGX_OK)
-                    {
-                        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                                      "directive \"%s\" in %s:%d "
-                                      "is not terminated by \";\"",
-                                      name->data,
-                                      cf->conf_file->file.name.data,
-                                      cf->conf_file->line);
-                        rc = NGX_ERROR;
-                        break;
-                    }
-
-                    if ((cmd->type & NGX_CONF_BLOCK)
-                        && rc != NGX_CONF_BLOCK_START)
-                    {
-                        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                                      "directive \"%s\" in %s:%d "
-                                      "has not the opening \"{\"",
-                                      name->data,
-                                      cf->conf_file->file.name.data,
-                                      cf->conf_file->line);
-                        rc = NGX_ERROR;
-                        break;
-                    }
-
-                    /* is the directive's argument count right ? */
-
-                    if (cmd->type & NGX_CONF_ANY) {
-                        valid = 1;
-
-                    } else if (cmd->type & NGX_CONF_FLAG) {
-
-                        if (cf->args->nelts == 2) {
-                            valid = 1;
-                        } else {
-                            valid = 0;
-                        }
-
-                    } else if (cmd->type & NGX_CONF_1MORE) {
-
-                        if (cf->args->nelts > 1) {
-                            valid = 1;
-                        } else {
-                            valid = 0;
-                        }
-
-                    } else if (cmd->type & NGX_CONF_2MORE) {
-
-                        if (cf->args->nelts > 2) {
-                            valid = 1;
-                        } else {
-                            valid = 0;
-                        }
-
-                    } else if (cf->args->nelts <= 10
-                               && (cmd->type
-                                   & argument_number[cf->args->nelts - 1]))
-                    {
-                        valid = 1;
-
-                    } else {
-                        valid = 0;
-                    }
-
-                    if (!valid) {
-                        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                                      "invalid number arguments in "
-                                      "directive \"%s\" in %s:%d",
-                                      name->data,
-                                      cf->conf_file->file.name.data,
-                                      cf->conf_file->line);
-                        rc = NGX_ERROR;
-                        break;
-                    }
-
-                    /* set up the directive's configuration context */
-
-                    conf = NULL;
-
-                    if (cmd->type & NGX_DIRECT_CONF) {
-                        conf = ((void **) cf->ctx)[ngx_modules[m]->index];
-
-                    } else if (cmd->type & NGX_MAIN_CONF) {
-                        conf = &(((void **) cf->ctx)[ngx_modules[m]->index]);
-
-                    } else if (cf->ctx) {
-                        confp = *(void **) ((char *) cf->ctx + cmd->conf);
-
-                        if (confp) {
-                            conf = confp[ngx_modules[m]->ctx_index];
-                        }
-                    }
-
-                    rv = cmd->set(cf, cmd, conf);
-
-                    if (rv == NGX_CONF_OK) {
-                        break;
-
-                    } else if (rv == NGX_CONF_ERROR) {
-                        rc = NGX_ERROR;
-                        break;
-
-                    } else {
-                        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                                      "the \"%s\" directive %s in %s:%d",
-                                      name->data, rv,
-                                      cf->conf_file->file.name.data,
-                                      cf->conf_file->line);
-
-                        rc = NGX_ERROR;
-                        break;
-                    }
-                }
-
-                cmd++;
-            }
-        }
-
-        if (!found) {
             ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                          "unknown directive \"%s\" in %s:%d",
-                          name->data,
-                          cf->conf_file->file.name.data,
-                          cf->conf_file->line);
-
+                         "%s in %s:%d",
+                         rv, cf->conf_file->file.name.data,
+                         cf->conf_file->line);
             rc = NGX_ERROR;
             break;
         }
 
+
+        rc = ngx_conf_handler(cf, rc);
+
         if (rc == NGX_ERROR) {
             break;
         }
     }
 
+
     if (filename) {
         cf->conf_file = prev;
 
@@ -337,6 +173,164 @@
 }
 
 
+static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)
+{
+    char           *rv;
+    void           *conf, **confp;
+    ngx_uint_t      i, valid;
+    ngx_str_t      *name;
+    ngx_command_t  *cmd;
+
+    name = cf->args->elts;
+
+    for (i = 0; ngx_modules[i]; i++) {
+
+        /* look up the directive in the appropriate modules */
+
+        if (ngx_modules[i]->type != NGX_CONF_MODULE
+            && ngx_modules[i]->type != cf->module_type)
+        {
+            continue;
+        }
+
+        cmd = ngx_modules[i]->commands;
+        if (cmd == NULL) {
+            continue;
+        }
+
+        while (cmd->name.len) {
+
+            if (name->len == cmd->name.len
+                && ngx_strcmp(name->data, cmd->name.data) == 0)
+            {
+                /* is the directive's location right ? */
+
+                if (!(cmd->type & cf->cmd_type)) {
+                    ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                                  "directive \"%s\" in %s:%d "
+                                  "is not allowed here",
+                                  name->data, cf->conf_file->file.name.data,
+                                  cf->conf_file->line);
+                    return NGX_ERROR;
+                }
+
+                if (!(cmd->type & NGX_CONF_BLOCK) && last != NGX_OK) {
+                    ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                                  "directive \"%s\" in %s:%d "
+                                  "is not terminated by \";\"",
+                                  name->data, cf->conf_file->file.name.data,
+                                  cf->conf_file->line);
+                    return NGX_ERROR;
+                }
+
+                if ((cmd->type & NGX_CONF_BLOCK)
+                    && last != NGX_CONF_BLOCK_START)
+                {
+                    ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                                  "directive \"%s\" in %s:%d "
+                                  "has not the opening \"{\"",
+                                  name->data, cf->conf_file->file.name.data,
+                                  cf->conf_file->line);
+                    return NGX_ERROR;
+                }
+
+                /* is the directive's argument count right ? */
+
+                if (cmd->type & NGX_CONF_ANY) {
+                    valid = 1;
+
+                } else if (cmd->type & NGX_CONF_FLAG) {
+
+                    if (cf->args->nelts == 2) {
+                        valid = 1;
+                    } else {
+                        valid = 0;
+                    }
+
+                } else if (cmd->type & NGX_CONF_1MORE) {
+
+                    if (cf->args->nelts > 1) {
+                        valid = 1;
+                    } else {
+                        valid = 0;
+                    }
+
+                } else if (cmd->type & NGX_CONF_2MORE) {
+
+                    if (cf->args->nelts > 2) {
+                        valid = 1;
+                    } else {
+                        valid = 0;
+                    }
+
+                } else if (cf->args->nelts <= 10
+                           && (cmd->type
+                               & argument_number[cf->args->nelts - 1]))
+                {
+                    valid = 1;
+
+                } else {
+                    valid = 0;
+                }
+
+                if (!valid) {
+                    ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                                  "invalid number arguments in "
+                                  "directive \"%s\" in %s:%d",
+                                  name->data, cf->conf_file->file.name.data,
+                                  cf->conf_file->line);
+                    return NGX_ERROR;
+                }
+
+                /* set up the directive's configuration context */
+
+                conf = NULL;
+
+                if (cmd->type & NGX_DIRECT_CONF) {
+                    conf = ((void **) cf->ctx)[ngx_modules[i]->index];
+
+                } else if (cmd->type & NGX_MAIN_CONF) {
+                    conf = &(((void **) cf->ctx)[ngx_modules[i]->index]);
+
+                } else if (cf->ctx) {
+                    confp = *(void **) ((char *) cf->ctx + cmd->conf);
+
+                    if (confp) {
+                        conf = confp[ngx_modules[i]->ctx_index];
+                    }
+                }
+
+                rv = cmd->set(cf, cmd, conf);
+
+                if (rv == NGX_CONF_OK) {
+                    return NGX_OK;
+                }
+
+                if (rv == NGX_CONF_ERROR) {
+                    return NGX_ERROR;
+                }
+
+                ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                              "the \"%s\" directive %s in %s:%d",
+                              name->data, rv, cf->conf_file->file.name.data,
+                              cf->conf_file->line);
+
+                return NGX_ERROR;
+            }
+
+            cmd++;
+        }
+    }
+
+    ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                  "unknown directive \"%s\" in %s:%d",
+                  name->data, cf->conf_file->file.name.data,
+                  cf->conf_file->line);
+
+    return NGX_ERROR;
+}
+
+
 static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf)
 {
     u_char      *start, ch, *src, *dst;
@@ -523,11 +517,13 @@
             }
 
             if (found) {
-                if (!(word = ngx_push_array(cf->args))) {
+                word = ngx_array_push(cf->args);
+                if (word == NULL) {
                     return NGX_ERROR;
                 }
 
-                if (!(word->data = ngx_palloc(cf->pool, b->pos - start + 1))) {
+                word->data = ngx_palloc(cf->pool, b->pos - start + 1);
+                if (word->data == NULL) {
                     return NGX_ERROR;
                 }
 
@@ -623,7 +619,8 @@
     name->len = cycle->root.len + old.len;
 
     if (cycle->connections) {
-        if (!(name->data = ngx_palloc(cycle->pool, name->len + 1))) {
+        name->data = ngx_palloc(cycle->pool, name->len + 1);
+        if (name->data == NULL) {
             return  NGX_ERROR;
         }
 
@@ -631,7 +628,8 @@
 
         /* the init_cycle */
 
-        if (!(name->data = ngx_alloc(name->len + 1, cycle->log))) {
+        name->data = ngx_alloc(name->len + 1, cycle->log);
+        if (name->data == NULL) {
             return  NGX_ERROR;
         }
     }
@@ -686,7 +684,8 @@
         }
     }
 
-    if (!(file = ngx_list_push(&cycle->open_files))) {
+    file = ngx_list_push(&cycle->open_files);
+    if (file == NULL) {
         return NULL;
     }
 
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index e8f06fd..4268157 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -20,13 +20,15 @@
     ngx_listening_t     *ls;
     struct sockaddr_in  *sin;
 
-    if (!(ls = ngx_array_push(&cf->cycle->listening))) {
+    ls = ngx_array_push(&cf->cycle->listening);
+    if (ls == NULL) {
         return NULL;
     }
 
     ngx_memzero(ls, sizeof(ngx_listening_t));
 
-    if (!(sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in)))) {
+    sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in));
+    if (sin == NULL) {
         return NULL;
     }
 
@@ -46,7 +48,6 @@
     ls->addr_text.len = ngx_sprintf(ls->addr_text.data + len, ":%d", port)
                         - ls->addr_text.data;
 
-
     ls->fd = (ngx_socket_t) -1;
     ls->family = AF_INET;
     ls->type = SOCK_STREAM;
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index ad9049e..51864e3 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -54,15 +54,18 @@
 
     log = old_cycle->log;
 
-    if (!(pool = ngx_create_pool(16 * 1024, log))) {
+    pool = ngx_create_pool(16 * 1024, log);
+    if (pool == NULL) {
         return NULL;
     }
     pool->log = log;
 
-    if (!(cycle = ngx_pcalloc(pool, sizeof(ngx_cycle_t)))) {
+    cycle = ngx_pcalloc(pool, sizeof(ngx_cycle_t));
+    if (cycle == NULL) {
         ngx_destroy_pool(pool);
         return NULL;
     }
+
     cycle->pool = pool;
     cycle->log = log;
     cycle->old_cycle = old_cycle;
@@ -72,10 +75,13 @@
 
 
     n = old_cycle->pathes.nelts ? old_cycle->pathes.nelts : 10;
-    if (!(cycle->pathes.elts = ngx_pcalloc(pool, n * sizeof(ngx_path_t *)))) {
+
+    cycle->pathes.elts = ngx_pcalloc(pool, n * sizeof(ngx_path_t *));
+    if (cycle->pathes.elts == NULL) {
         ngx_destroy_pool(pool);
         return NULL;
     }
+
     cycle->pathes.nelts = 0;
     cycle->pathes.size = sizeof(ngx_path_t *);
     cycle->pathes.nalloc = n;
@@ -100,7 +106,8 @@
     }
 
 
-    if (!(cycle->new_log = ngx_log_create_errlog(cycle, NULL))) {
+    cycle->new_log = ngx_log_create_errlog(cycle, NULL);
+    if (cycle->new_log == NULL) {
         ngx_destroy_pool(pool);
         return NULL;
     }
@@ -109,11 +116,13 @@
 
 
     n = old_cycle->listening.nelts ? old_cycle->listening.nelts : 10;
+
     cycle->listening.elts = ngx_pcalloc(pool, n * sizeof(ngx_listening_t));
     if (cycle->listening.elts == NULL) {
         ngx_destroy_pool(pool);
         return NULL;
     }
+
     cycle->listening.nelts = 0;
     cycle->listening.size = sizeof(ngx_listening_t);
     cycle->listening.nalloc = n;
@@ -147,7 +156,7 @@
 
     ngx_memzero(&conf, sizeof(ngx_conf_t));
     /* STUB: init array ? */
-    conf.args = ngx_create_array(pool, 10, sizeof(ngx_str_t));
+    conf.args = ngx_array_create(pool, 10, sizeof(ngx_str_t));
     if (conf.args == NULL) {
         ngx_destroy_pool(pool);
         return NULL;
@@ -516,7 +525,7 @@
 
     ngx_temp_pool->log = cycle->log;
 
-    old = ngx_push_array(&ngx_old_cycles);
+    old = ngx_array_push(&ngx_old_cycles);
     if (old == NULL) {
         exit(1);
     }
@@ -562,7 +571,7 @@
 {
     ngx_uint_t        trunc;
     size_t            len;
-    u_char           *name, pid[NGX_INT64_LEN];
+    u_char            pid[NGX_INT64_LEN];
     ngx_file_t        file;
     ngx_core_conf_t  *ccf, *old_ccf;
 
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
index 561f080..6fe04e7 100644
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -43,7 +43,8 @@
 
     file->name.len = path->name.len + 1 + path->len + NGX_ATOMIC_T_LEN;
 
-    if (!(file->name.data = ngx_palloc(pool, file->name.len + 1))) {
+    file->name.data = ngx_palloc(pool, file->name.len + 1);
+    if (file->name.data == NULL) {
         return NGX_ERROR;
     }
 
@@ -203,7 +204,8 @@
         return "is duplicate";
     }
 
-    if (!(path = ngx_pcalloc(cf->pool, sizeof(ngx_path_t)))) {
+    path = ngx_pcalloc(cf->pool, sizeof(ngx_path_t));
+    if (path == NULL) {
         return NGX_CONF_ERROR;
     }
 
@@ -292,7 +294,8 @@
         }
     }
 
-    if (!(p = ngx_array_push(&cf->cycle->pathes))) {
+    p = ngx_array_push(&cf->cycle->pathes);
+    if (p == NULL) {
         return NGX_ERROR;
     }
 
diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h
index c9063c5..2bda858 100644
--- a/src/core/ngx_file.h
+++ b/src/core/ngx_file.h
@@ -70,7 +70,8 @@
 #define ngx_conf_merge_path_value(curr, prev, path, l1, l2, l3, clean, cf)    \
     if (curr == NULL) {                                                       \
         if (prev == NULL) {                                                   \
-            if (!(curr = ngx_palloc(cf->pool, sizeof(ngx_path_t)))) {         \
+            curr = ngx_palloc(cf->pool, sizeof(ngx_path_t));                  \
+            if (curr == NULL) {                                               \
                 return NGX_CONF_ERROR;                                        \
             }                                                                 \
                                                                               \
diff --git a/src/core/ngx_garbage_collector.c b/src/core/ngx_garbage_collector.c
index ba7d733..07a3f7f 100644
--- a/src/core/ngx_garbage_collector.c
+++ b/src/core/ngx_garbage_collector.c
@@ -77,7 +77,8 @@
 
             buf.len = dname->len + 1 + len + NGX_DIR_MASK_LEN;
 
-            if (!(buf.data = ngx_alloc(buf.len + 1, ctx->log))) {
+            buf.data = ngx_alloc(buf.len + 1, ctx->log);
+            if (buf.data == NULL) {
                 return NGX_ABORT;
             }
         }
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index a30ff03..6cad053 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -244,7 +244,8 @@
 
         u->port = u->default_port_value;
 
-        if (!(u->port_text.data = ngx_palloc(cf->pool, sizeof("65536") - 1))) {
+        u->port_text.data = ngx_palloc(cf->pool, sizeof("65536") - 1);
+        if (u->port_text.data == NULL) {
             return NULL;
         }
 
@@ -271,7 +272,8 @@
 
     u->port = htons(u->port);
 
-    if (!(host = ngx_palloc(cf->pool, u->host.len + 1))) {
+    host = ngx_palloc(cf->pool, u->host.len + 1);
+    if (host == NULL) {
         return NULL;
     }
 
@@ -297,7 +299,6 @@
 
         peers = ngx_pcalloc(cf->pool,
                             sizeof(ngx_peers_t) + sizeof(ngx_peer_t) * (i - 1));
-
         if (peers == NULL) {
             return NULL;
         }
@@ -307,7 +308,8 @@
 
         for (i = 0; h->h_addr_list[i] != NULL; i++) {
 
-            if (!(sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in)))) {
+            sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in));
+            if (sin == NULL) {
                 return NULL;
             }
 
@@ -320,7 +322,8 @@
 
             len = INET_ADDRSTRLEN - 1 + 1 + u->port_text.len;
     
-            if (!(peers->peer[i].name.data = ngx_palloc(cf->pool, len))) {
+            peers->peer[i].name.data = ngx_palloc(cf->pool, len);
+            if (peers->peer[i].name.data == NULL) {
                 return NULL;
             }
 
@@ -345,11 +348,13 @@
 
         /* MP: ngx_shared_palloc() */
 
-        if (!(peers = ngx_pcalloc(cf->pool, sizeof(ngx_peers_t)))) {
+        peers = ngx_pcalloc(cf->pool, sizeof(ngx_peers_t));
+        if (peers == NULL) {
             return NULL;
         }
 
-        if (!(sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in)))) {
+        sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in));
+        if (sin == NULL) {
             return NULL;
         }
 
@@ -366,7 +371,8 @@
 
         peers->peer[0].name.len = len;
 
-        if (!(peers->peer[0].name.data = ngx_palloc(cf->pool, len))) {
+        peers->peer[0].name.data = ngx_palloc(cf->pool, len);
+        if (peers->peer[0].name.data == NULL) {
             return NULL;
         }
 
diff --git a/src/core/ngx_list.c b/src/core/ngx_list.c
index 236eff4..c082afa 100644
--- a/src/core/ngx_list.c
+++ b/src/core/ngx_list.c
@@ -19,11 +19,13 @@
 
         /* the last part is full, allocate a new list part */
 
-        if (!(last = ngx_palloc(l->pool, sizeof(ngx_list_part_t)))) {
+        last = ngx_palloc(l->pool, sizeof(ngx_list_part_t));
+        if (last == NULL) {
             return NULL;
         }
 
-        if (!(last->elts = ngx_palloc(l->pool, l->nalloc * l->size))) {
+        last->elts = ngx_palloc(l->pool, l->nalloc * l->size);
+        if (last->elts == NULL) {
             return NULL;
         }
 
diff --git a/src/core/ngx_list.h b/src/core/ngx_list.h
index 2dd8ab3..c030cf2 100644
--- a/src/core/ngx_list.h
+++ b/src/core/ngx_list.h
@@ -30,10 +30,12 @@
 } ngx_list_t;
 
 
-static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool,
-                                          ngx_uint_t n, size_t size)
+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))) {
+    list->part.elts = ngx_palloc(pool, n * size);
+    if (list->part.elts == NULL) {
         return NGX_ERROR;
     }
 
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 5d937f2..adccd5e 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -253,11 +253,13 @@
         name = NULL;
     }
 
-    if (!(log = ngx_pcalloc(cycle->pool, sizeof(ngx_log_t)))) {
+    log = ngx_pcalloc(cycle->pool, sizeof(ngx_log_t));
+    if (log == NULL) {
         return NULL;
     }
 
-    if (!(log->file = ngx_conf_open_file(cycle, name))) {
+    log->file = ngx_conf_open_file(cycle, name);
+    if (log->file == NULL) {
         return NULL;
     }
 
diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c
index 5f6970f..313557d 100644
--- a/src/core/ngx_output_chain.c
+++ b/src/core/ngx_output_chain.c
@@ -155,7 +155,8 @@
                         }
                     }
 
-                    if (!(ctx->buf = ngx_create_temp_buf(ctx->pool, size))) {
+                    ctx->buf = ngx_create_temp_buf(ctx->pool, size);
+                    if (ctx->buf == NULL) {
                         return NGX_ERROR;
                     }
 
@@ -186,9 +187,11 @@
                 ctx->in = ctx->in->next;
             }
 
-            if (!(cl = ngx_alloc_chain_link(ctx->pool))) {
+            cl = ngx_alloc_chain_link(ctx->pool);
+            if (cl == NULL) {
                 return NGX_ERROR;
             }
+
             cl->buf = ctx->buf;
             cl->next = NULL;
             *last_out = cl;
@@ -269,7 +272,8 @@
 
     while (in) {
 
-        if (!(cl = ngx_alloc_chain_link(pool))) {
+        cl = ngx_alloc_chain_link(pool);
+        if (cl == NULL) {
             return NGX_ERROR;
         }
 
@@ -281,7 +285,8 @@
             && buf->file_pos < NGX_SENDFILE_LIMIT
             && buf->file_last > NGX_SENDFILE_LIMIT)
         {
-            if (!(b = ngx_calloc_buf(pool))) {
+            b = ngx_calloc_buf(pool);
+            if (b == NULL) {
                 return NGX_ERROR;
             }
 
@@ -431,9 +436,11 @@
         ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->connection->log, 0,
                        "chain writer buf size: %uz", ngx_buf_size(in->buf));
 
-        if (!(cl = ngx_alloc_chain_link(ctx->pool))) {
+        cl = ngx_alloc_chain_link(ctx->pool);
+        if (cl == NULL) {
             return NGX_ERROR;
         }
+
         cl->buf = in->buf;
         cl->next = NULL;
         *ctx->last = cl;
diff --git a/src/core/ngx_palloc.c b/src/core/ngx_palloc.c
index fc6f36e..8faf9a7 100644
--- a/src/core/ngx_palloc.c
+++ b/src/core/ngx_palloc.c
@@ -8,11 +8,13 @@
 #include <ngx_core.h>
 
 
-ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log)
+ngx_pool_t *
+ngx_create_pool(size_t size, ngx_log_t *log)
 {
     ngx_pool_t  *p;
 
-    if (!(p = ngx_alloc(size, log))) {
+    p = ngx_alloc(size, log);
+    if (p == NULL) {
        return NULL;
     }
 
@@ -26,7 +28,8 @@
 }
 
 
-void ngx_destroy_pool(ngx_pool_t *pool)
+void
+ngx_destroy_pool(ngx_pool_t *pool)
 {
     ngx_pool_t        *p, *n;
     ngx_pool_large_t  *l;
@@ -68,7 +71,8 @@
 }
 
 
-void *ngx_palloc(ngx_pool_t *pool, size_t size)
+void *
+ngx_palloc(ngx_pool_t *pool, size_t size)
 {
     u_char            *m;
     ngx_pool_t        *p, *n;
@@ -94,7 +98,8 @@
 
         /* allocate a new pool block */
 
-        if (!(n = ngx_create_pool((size_t) (p->end - (u_char *) p), p->log))) {
+        n = ngx_create_pool((size_t) (p->end - (u_char *) p), p->log);
+        if (n == NULL) {
             return NULL;
         }
 
@@ -125,7 +130,8 @@
     }
 
     if (large == NULL) {
-        if (!(large = ngx_palloc(pool, sizeof(ngx_pool_large_t)))) {
+        large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
+        if (large == NULL) {
             return NULL;
         }
 
@@ -133,11 +139,13 @@
     }
 
 #if 0
-    if (!(p = ngx_memalign(ngx_pagesize, size, pool->log))) {
+    p = ngx_memalign(ngx_pagesize, size, pool->log);
+    if (p == NULL) {
         return NULL;
     }
 #else
-    if (!(p = ngx_alloc(size, pool->log))) {
+    p = ngx_alloc(size, pool->log);
+    if (p == NULL) {
         return NULL;
     }
 #endif
@@ -155,7 +163,8 @@
 }
 
 
-ngx_int_t ngx_pfree(ngx_pool_t *pool, void *p)
+ngx_int_t
+ngx_pfree(ngx_pool_t *pool, void *p)
 {
     ngx_pool_large_t  *l;
 
@@ -174,7 +183,8 @@
 }
 
 
-void *ngx_pcalloc(ngx_pool_t *pool, size_t size)
+void *
+ngx_pcalloc(ngx_pool_t *pool, size_t size)
 {
     void *p;
 
@@ -188,7 +198,8 @@
 
 #if 0
 
-static void *ngx_get_cached_block(size_t size)
+static void *
+ngx_get_cached_block(size_t size)
 {
     void                     *p;
     ngx_cached_block_slot_t  *slot;
diff --git a/src/core/ngx_palloc.h b/src/core/ngx_palloc.h
index 71be742..b310082 100644
--- a/src/core/ngx_palloc.h
+++ b/src/core/ngx_palloc.h
@@ -21,8 +21,6 @@
 
 #define NGX_DEFAULT_POOL_SIZE   (16 * 1024)
 
-#define ngx_test_null(p, alloc, rc)  if ((p = alloc) == NULL) { return rc; }
-
 
 typedef struct ngx_pool_large_s  ngx_pool_large_t;
 
diff --git a/src/core/ngx_radix_tree.c b/src/core/ngx_radix_tree.c
index f8deb21..f82a5e5 100644
--- a/src/core/ngx_radix_tree.c
+++ b/src/core/ngx_radix_tree.c
@@ -17,7 +17,8 @@
     uint32_t           key, mask, inc;
     ngx_radix_tree_t  *tree;
 
-    if (!(tree = ngx_palloc(pool, sizeof(ngx_radix_tree_t)))) {
+    tree = ngx_palloc(pool, sizeof(ngx_radix_tree_t));
+    if (tree == NULL) {
         return NULL;
     }
 
@@ -26,7 +27,8 @@
     tree->start = NULL;
     tree->size = 0;
 
-    if (!(tree->root = ngx_radix_alloc(tree))) {
+    tree->root = ngx_radix_alloc(tree);
+    if (tree->root == NULL) {
         return NULL;
     }
 
@@ -140,7 +142,8 @@
     }
 
     while (bit & mask) {
-        if (!(next = ngx_radix_alloc(tree))) {
+        next = ngx_radix_alloc(tree);
+        if (next == NULL) {
             return NGX_ERROR;
         }
 
@@ -266,7 +269,8 @@
     }
 
     if (tree->size < sizeof(ngx_radix_node_t)) {
-        if (!(tree->start = ngx_palloc(tree->pool, ngx_pagesize))) {
+        tree->start = ngx_palloc(tree->pool, ngx_pagesize);
+        if (tree->start == NULL) {
             return NULL;
         }
 
diff --git a/src/core/ngx_regex.c b/src/core/ngx_regex.c
index bb719a5..1257994 100644
--- a/src/core/ngx_regex.c
+++ b/src/core/ngx_regex.c
@@ -79,7 +79,7 @@
 }
 
 
-ngx_uint_t ngx_regex_capture_count(ngx_regex_t *re)
+ngx_int_t ngx_regex_capture_count(ngx_regex_t *re)
 {
     int  rc, n;
 
@@ -87,7 +87,11 @@
 
     rc = pcre_fullinfo(re, NULL, PCRE_INFO_CAPTURECOUNT, &n);
 
-    return (ngx_uint_t) n;
+    if (rc < 0) {
+        return (ngx_int_t) rc;
+    }
+
+    return (ngx_int_t) n;
 }
 
 
diff --git a/src/core/ngx_regex.h b/src/core/ngx_regex.h
index ff07fc7..7eefdbe 100644
--- a/src/core/ngx_regex.h
+++ b/src/core/ngx_regex.h
@@ -23,11 +23,12 @@
 void ngx_regex_init(void);
 ngx_regex_t *ngx_regex_compile(ngx_str_t *pattern, ngx_int_t options,
                                ngx_pool_t *pool, ngx_str_t *err);
-ngx_uint_t ngx_regex_capture_count(ngx_regex_t *re);
+ngx_int_t ngx_regex_capture_count(ngx_regex_t *re);
 ngx_int_t ngx_regex_exec(ngx_regex_t *re, ngx_str_t *s,
                          int *captures, ngx_int_t size);
 
-#define ngx_regex_exec_n  "pcre_exec()"
+#define ngx_regex_exec_n           "pcre_exec()"
+#define ngx_regex_capture_count_n  "pcre_fullinfo()"
 
 
 #endif /* _NGX_REGEX_H_INCLUDED_ */
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
index fdb59fd..a1f593f 100644
--- a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -34,7 +34,8 @@
 {
     u_char  *dst;
 
-    if (!(dst = ngx_palloc(pool, src->len))) {
+    dst = ngx_palloc(pool, src->len);
+    if (dst == NULL) {
         return NULL;
     }
 
@@ -489,6 +490,84 @@
 }
 
 
+ssize_t
+ngx_atosz(u_char *line, size_t n)
+{
+    ssize_t  value;
+
+    if (n == 0) {
+        return NGX_ERROR;
+    }
+
+    for (value = 0; n--; line++) {
+        if (*line < '0' || *line > '9') {
+            return NGX_ERROR;
+        }
+
+        value = value * 10 + (*line - '0');
+    }
+
+    if (value < 0) {
+        return NGX_ERROR;
+
+    } else {
+        return value;
+    }
+}
+
+
+off_t
+ngx_atoof(u_char *line, size_t n)
+{
+    off_t  value;
+
+    if (n == 0) {
+        return NGX_ERROR;
+    }
+
+    for (value = 0; n--; line++) {
+        if (*line < '0' || *line > '9') {
+            return NGX_ERROR;
+        }
+
+        value = value * 10 + (*line - '0');
+    }
+
+    if (value < 0) {
+        return NGX_ERROR;
+
+    } else {
+        return value;
+    }
+}
+
+
+time_t
+ngx_atotm(u_char *line, size_t n)
+{
+    time_t  value;
+
+    if (n == 0) {
+        return NGX_ERROR;
+    }
+
+    for (value = 0; n--; line++) {
+        if (*line < '0' || *line > '9') {
+            return NGX_ERROR;
+        }
+
+        value = value * 10 + (*line - '0');
+    }
+
+    if (value < 0) {
+        return NGX_ERROR;
+
+    } else {
+        return value;
+    }
+}
+
+
 ngx_int_t
 ngx_hextoi(u_char *line, size_t n)
 {
diff --git a/src/core/ngx_string.h b/src/core/ngx_string.h
index 52bac6a..25b06b3 100644
--- a/src/core/ngx_string.h
+++ b/src/core/ngx_string.h
@@ -23,6 +23,7 @@
 
 
 #define ngx_tolower(c)     (u_char) ((c >= 'A' && c <= 'Z') ? (c | 0x20) : c)
+#define ngx_toupper(c)     (u_char) ((c >= 'a' && c <= 'z') ? (c & ~0x20) : c)
 
 
 #if (NGX_WIN32)
@@ -81,6 +82,9 @@
 ngx_int_t ngx_rstrncasecmp(u_char *s1, u_char *s2, size_t n);
 
 ngx_int_t ngx_atoi(u_char *line, size_t n);
+ssize_t ngx_atosz(u_char *line, size_t n);
+off_t ngx_atoof(u_char *line, size_t n);
+time_t ngx_atotm(u_char *line, size_t n);
 ngx_int_t ngx_hextoi(u_char *line, size_t n);
 
 void ngx_md5_text(u_char *text, u_char *md5);
diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c
index 4293289..e4fa69d 100644
--- a/src/core/ngx_times.c
+++ b/src/core/ngx_times.c
@@ -70,8 +70,8 @@
 static char  *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
                            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
 
-
-void ngx_time_init(void)
+void
+ngx_time_init(void)
 {
     struct timeval  tv;
 
@@ -104,9 +104,12 @@
 
 #if (NGX_THREADS)
 
-ngx_int_t ngx_time_mutex_init(ngx_log_t *log)
+ngx_int_t
+ngx_time_mutex_init(ngx_log_t *log)
 {
-    if (!(ngx_time_mutex = ngx_mutex_init(log, NGX_MUTEX_LIGHT))) {
+    ngx_time_mutex = ngx_mutex_init(log, NGX_MUTEX_LIGHT);
+
+    if (ngx_time_mutex == NULL) {
         return NGX_ERROR;
     }
 
@@ -116,7 +119,8 @@
 #endif
 
 
-void ngx_time_update(time_t s)
+void
+ngx_time_update(time_t s)
 {
     u_char    *p;
     ngx_tm_t   tm;
@@ -209,7 +213,8 @@
 }
 
 
-u_char *ngx_http_time(u_char *buf, time_t t)
+u_char *
+ngx_http_time(u_char *buf, time_t t)
 {
     ngx_tm_t  tm;
 
@@ -226,7 +231,8 @@
 }
 
 
-u_char *ngx_http_cookie_time(u_char *buf, time_t t)
+u_char *
+ngx_http_cookie_time(u_char *buf, time_t t)
 {
     ngx_tm_t  tm;
 
@@ -252,7 +258,8 @@
 }
 
 
-void ngx_gmtime(time_t t, ngx_tm_t *tp)
+void
+ngx_gmtime(time_t t, ngx_tm_t *tp)
 {
     ngx_int_t  sec, min, hour, mday, mon, year, wday, yday, days;
 
diff --git a/src/core/ngx_unix_domain.c b/src/core/ngx_unix_domain.c
index 436777f..3df83bb 100644
--- a/src/core/ngx_unix_domain.c
+++ b/src/core/ngx_unix_domain.c
@@ -59,11 +59,13 @@
 
     /* MP: ngx_shared_palloc() */
 
-    if (!(peers = ngx_pcalloc(cf->pool, sizeof(ngx_peers_t)))) {
+    peers = ngx_pcalloc(cf->pool, sizeof(ngx_peers_t));
+    if (peers == NULL) {
         return NULL;
     }
 
-    if (!(sun = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_un)))) {
+    sun = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_un));
+    if (sun == NULL) {
         return NULL;
     }
 
