nginx-0.0.1-2003-01-30-10:28:09 import
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index e112001..8497e2d 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -1,6 +1,8 @@
#include <ngx_config.h>
+
#include <ngx_core.h>
+#include <ngx_files.h>
#include <ngx_conf_file.h>
diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h
index 2797a8d..a90a1dc 100644
--- a/src/core/ngx_config.h
+++ b/src/core/ngx_config.h
@@ -21,6 +21,11 @@
#define ngx_align(p) (char *) (((NGX_ALIGN_TYPE) p + NGX_ALIGN) & ~NGX_ALIGN)
+
+/* Platform specific: array[NGX_INVALID_ARRAY_INDEX] should cause SIGSEGV */
+#define NGX_INVALID_ARRAY_INDEX 0x80000000
+
+
#ifdef _WIN32
#define WIN32 1
diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index a94640d..93f6cbd 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -19,10 +19,6 @@
ngx_socket_t fd;
void *data;
- /* STUB */
- ngx_array_t *requests;
- int requests_len;
-
#ifdef NGX_EVENT
ngx_event_t *read;
ngx_event_t *write;
@@ -34,9 +30,11 @@
void *ctx;
ngx_server_t *servers;
- ngx_pool_t *pool;
ngx_log_t *log;
+ ngx_pool_t *pool;
+ int pool_size;
+
int family;
struct sockaddr *sockaddr;
socklen_t socklen;
diff --git a/src/core/ngx_core.h b/src/core/ngx_core.h
index adab501..8170f85 100644
--- a/src/core/ngx_core.h
+++ b/src/core/ngx_core.h
@@ -8,6 +8,7 @@
#define NGX_AGAIN -2
#define NGX_WAITING -3
#define NGX_DECLINED -4
+#define NGX_ALERT -5
#define NGX_MAXHOSTNAMELEN 32
diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h
index e827aff..c1bb3c2 100644
--- a/src/core/ngx_file.h
+++ b/src/core/ngx_file.h
@@ -2,7 +2,7 @@
#define _NGX_FILE_H_INCLUDED_
-#include <ngx_files.h>
+#include <ngx_file.h>
#include <ngx_log.h>
#include <ngx_string.h>
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index aba990b..b566e1a 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -4,10 +4,34 @@
#include <ngx_inet.h>
+/* AF_INET only */
+
+size_t ngx_sock_ntop(int family, struct sockaddr *addr, char *text, size_t len)
+{
+ char *p;
+ struct sockaddr_in *addr_in;
+
+ if (family != AF_INET) {
+ return 0;
+ }
+
+ addr_in = (struct sockaddr_in *) addr;
+ p = (char *) &addr_in->sin_addr;
+
+ return ngx_snprintf(text, len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len,
+ "%u.%u.%u.%u",
+ (unsigned char) p[0],
+ (unsigned char) p[1],
+ (unsigned char) p[2],
+ (unsigned char) p[3]);
+}
+
+
size_t ngx_inet_ntop(int family, char *addr, char *text, size_t len)
{
- if (family != AF_INET)
+ if (family != AF_INET) {
return 0;
+ }
return ngx_snprintf(text, len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len,
"%u.%u.%u.%u",
diff --git a/src/core/ngx_inet.h b/src/core/ngx_inet.h
index 0766d1f..9f71444 100644
--- a/src/core/ngx_inet.h
+++ b/src/core/ngx_inet.h
@@ -2,6 +2,7 @@
#define _NGX_INET_H_INCLUDED_
+size_t ngx_sock_ntop(int family, struct sockaddr *addr, char *text, size_t len);
size_t ngx_inet_ntop(int family, char *addr, char *text, size_t len);
diff --git a/src/core/ngx_listen.h b/src/core/ngx_listen.h
index 91f39ad..61f08fd 100644
--- a/src/core/ngx_listen.h
+++ b/src/core/ngx_listen.h
@@ -28,6 +28,7 @@
void *servers; /* array of ngx_http_in_addr_t, for example */
ngx_log_t *log;
+ int pool_size;
int backlog;
time_t post_accept_timeout; /* should be here because
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index d79237e..c7b780f 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -2,8 +2,8 @@
#define _NGX_LOG_H_INCLUDED_
+#include <ngx_types.h>
#include <ngx_errno.h>
-#include <ngx_files.h>
typedef enum {
NGX_LOG_EMERG = 0,
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 04036d4..63cf999 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -120,6 +120,7 @@
c->ctx = s[i].ctx;
c->servers = s[i].servers;
c->log = s[i].log;
+ c->pool_size = s[i].pool_size;
ngx_test_null(ev->log,
ngx_palloc(pool, sizeof(ngx_log_t)), /* void */ ; );
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 71895a0..a918810 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -111,13 +111,19 @@
/* Event filter requires to read/write the whole data -
select, poll, /dev/poll, kqueue. */
#define NGX_HAVE_LEVEL_EVENT 1
-/* Event filter deleted after notification - select, poll, kqueue.
- /dev/poll, epoll implemetned with additional syscall */
+
+/* Event filter is deleted after notification - select, poll, kqueue.
+ Using /dev/poll, epoll it can be implemented with additional syscall */
#define NGX_HAVE_ONESHOT_EVENT 2
-/* Event filter notify only changes - kqueue, epoll */
+
+/* Event filter notifies only changes and initial level - kqueue */
#define NGX_HAVE_CLEAR_EVENT 4
-/* No nedd to add or delete event filters - overlapped, aio_read, aioread */
-#define NGX_HAVE_AIO_EVENT 8
+
+/* Event filter notifies only changes (edgesi) but not initial level - epoll */
+#define NGX_HAVE_EDGE_EVENT 8
+
+/* No need to add or delete event filters - overlapped, aio_read, aioread */
+#define NGX_HAVE_AIO_EVENT 16
/* Event filter is deleted before closing file. Has no meaning
for select, poll, epoll.
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 73d83e6..14422af 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -11,40 +11,55 @@
#include <ngx_event_accept.h>
+/* This function should always return NGX_OK even there are some failures
+ because if we return NGX_ERROR then listening socket would be closed */
+
int ngx_event_accept(ngx_event_t *ev)
{
+ socklen_t len;
+ struct sockaddr *sa;
ngx_err_t err;
+ ngx_pool_t *pool;
ngx_socket_t s;
ngx_event_t *rev, *wev;
- ngx_connection_t *c, *ac;
+ ngx_connection_t *c, *ls;
- ac = (ngx_connection_t *) ev->data;
-
+ ls = (ngx_connection_t *) ev->data;
+
ngx_log_debug(ev->log, "ngx_event_accept: accept ready: %d" _
ev->available);
-
+
ev->ready = 0;
-
+
+/* DEBUG */ ev->available++;
+
do {
- if ((s = accept(ac->fd, ac->sockaddr, &ac->socklen)) == -1) {
+ ngx_test_null(pool, ngx_create_pool(ls->pool_size, ev->log), NGX_OK);
+
+ ngx_test_null(sa, ngx_palloc(pool, ls->socklen), NGX_OK);
+ len = ls->socklen;
+
+ s = accept(ls->fd, sa, &len);
+ if (s == -1) {
err = ngx_socket_errno;
+ ngx_destroy_pool(pool);
+
if (err == NGX_EAGAIN) {
- ngx_log_error(NGX_LOG_INFO, ev->log, err,
- "ngx_event_accept: EAGAIN while accept %s",
- ac->addr_text);
+ ngx_log_error(NGX_LOG_NOTICE, ev->log, err,
+ "EAGAIN while accept %s", ls->addr_text.data);
return NGX_OK;
}
- ngx_log_error(NGX_LOG_ERR, ev->log, err,
- "ngx_event_accept: accept %s failed", ac->addr_text);
- /* if we return NGX_ERROR listen socket would be closed */
+ ngx_log_error(NGX_LOG_ALERT, ev->log, err,
+ "accept %s failed", ls->addr_text.data);
return NGX_OK;
}
#if !(HAVE_INHERITED_NONBLOCK)
- if (ngx_nonblocking(s) == -1)
- ngx_log_error(NGX_LOG_ERR, ev->log, ngx_socket_errno,
- ngx_nonblocking_n "failed");
+ if (ngx_nonblocking(s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
+ ngx_nonblocking_n " %s failed", ls->addr_text.data);
+ }
#endif
rev = &ngx_read_events[s];
@@ -55,12 +70,14 @@
ngx_memzero(wev, sizeof(ngx_event_t));
ngx_memzero(c, sizeof(ngx_connection_t));
- c->sockaddr = ac->sockaddr;
- c->family = ac->family;
- c->socklen = ac->socklen;
- c->addr = ac->addr;
- c->addr_text_max_len = ac->addr_text_max_len;
- c->post_accept_timeout = ac->post_accept_timeout;
+ c->pool = pool;
+
+ c->sockaddr = sa;
+ c->family = ls->family;
+ c->socklen = len;
+ c->addr = ls->addr;
+ c->addr_text_max_len = ls->addr_text_max_len;
+ c->post_accept_timeout = ls->post_accept_timeout;
rev->index = wev->index = NGX_INVALID_INDEX;
@@ -77,30 +94,39 @@
wev->timer_handler = rev->timer_handler = ngx_event_close_connection;
wev->close_handler = rev->close_handler = ngx_event_close_connection;
- c->ctx = ac->ctx;
- c->servers = ac->servers;
- c->log = rev->log = wev->log = ev->log;
+ c->ctx = ls->ctx;
+ c->servers = ls->servers;
- /* STUB: x86: SP: xadd, MT: lock xadd, MP: lock xadd, shared */
+ ngx_test_null(c->log, ngx_palloc(c->pool, sizeof(ngx_log_t)), NGX_OK);
+ ngx_memcpy(c->log, ev->log, sizeof(ngx_log_t));
+ rev->log = wev->log = c->log;
+
+ /* STUB: x86: SP: xadd ?, MT: lock xadd, MP: lock xadd, shared */
c->number = ngx_connection_counter++;
ngx_log_debug(ev->log, "ngx_event_accept: accept: %d, %d" _
- s _ c->number);
+ s _ c->number);
#if (HAVE_DEFERRED_ACCEPT)
- if (ev->accept_filter)
+ if (ev->accept_filter) {
rev->ready = 1;
+ }
#endif
- ac->handler(c);
+ ls->handler(c);
-#if (HAVE_KQUEUE)
-#if !(USE_KQUEUE)
- if (ngx_event_type == NGX_KQUEUE_EVENT)
-#endif
+#if (USE_KQUEUE)
+
+ ev->available--;
+
+#elif (HAVE_KQUEUE)
+
+ if (ngx_event_type == NGX_KQUEUE_EVENT) {
ev->available--;
+ }
+
#endif
} while (ev->available);
- return 0;
+ return NGX_OK;
}
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 56e2b5b..5396fa2 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -1,8 +1,10 @@
#include <ngx_config.h>
+
#include <ngx_string.h>
#include <ngx_socket.h>
#include <ngx_listen.h>
+#include <ngx_inet.h>
#include <ngx_http.h>
#include <ngx_http_config.h>
#include <ngx_http_core_module.h>
@@ -324,7 +326,7 @@
ls->addr_text.len =
ngx_snprintf(ls->addr_text.data
+ ngx_inet_ntop(AF_INET,
- &in_addr[a].addr,
+ (char *) &in_addr[a].addr,
ls->addr_text.data,
INET_ADDRSTRLEN),
6, ":%d", in_port[p].port);
@@ -345,6 +347,7 @@
ls->handler = ngx_http_init_connection;
ls->log = cf->log;
+ ls->pool_size = ngx_http_connection_pool_size;
ls->ctx = ctx;
ls->servers = &in_port[p];
@@ -372,7 +375,7 @@
in_addr = (ngx_http_in_addr_t *) in_port[p].addr.elts;
for (a = 0; a < in_port[p].addr.nelts; a++) {
char ip[20];
- ngx_inet_ntop(AF_INET, &in_addr[a].addr, ip, 20);
+ ngx_inet_ntop(AF_INET, (char *) &in_addr[a].addr, ip, 20);
ngx_log_debug(cf->log, "%s %08x" _ ip _ in_addr[a].core_srv_conf);
}
}
diff --git a/src/http/ngx_http_event.c b/src/http/ngx_http_event.c
index 26e67f8..6f7134a 100644
--- a/src/http/ngx_http_event.c
+++ b/src/http/ngx_http_event.c
@@ -16,12 +16,6 @@
#include <ngx_http_config.h>
#include <ngx_http_core_module.h>
-/* STUB */
-#include <ngx_http_output_filter.h>
-int ngx_http_static_handler(ngx_http_request_t *r);
-int ngx_http_index_handler(ngx_http_request_t *r);
-int ngx_http_proxy_handler(ngx_http_request_t *r);
-/**/
int ngx_http_init_connection(ngx_connection_t *c);
@@ -41,13 +35,6 @@
static int ngx_http_set_lingering_close(ngx_http_request_t *r);
static int ngx_http_lingering_close_handler(ngx_event_t *ev);
-#if 0
-int ngx_http_special_response(ngx_http_request_t *r, int error);
-int ngx_http_redirect(ngx_http_request_t *r, int redirect);
-int ngx_http_error(ngx_http_request_t *r, int error);
-int ngx_http_close_request(ngx_http_request_t *r);
-#endif
-
static int ngx_http_close_connection(ngx_event_t *ev);
static size_t ngx_http_log_error(void *data, char *buf, size_t len);
@@ -76,34 +63,23 @@
int ngx_http_init_connection(ngx_connection_t *c)
{
ngx_event_t *ev;
- struct sockaddr *addr;
ngx_http_log_ctx_t *ctx;
ev = c->read;
ev->event_handler = ngx_http_init_request;
- ngx_test_null(c->pool,
- ngx_create_pool(ngx_http_connection_pool_size, ev->log),
- NGX_ERROR);
-
- ngx_test_null(c->requests, ngx_create_array(c->pool, 10, sizeof(char *)),
- NGX_ERROR);
-
ev->close_handler = ngx_http_close_connection;
c->write->close_handler = ngx_http_close_connection;
- ngx_test_null(addr, ngx_palloc(c->pool, c->socklen), NGX_ERROR);
- ngx_memcpy(addr, c->sockaddr, c->socklen);
- c->sockaddr = addr;
-
ngx_test_null(c->addr_text.data, ngx_palloc(c->pool, c->addr_text_max_len),
NGX_ERROR);
- c->addr_text.len = ngx_inet_ntop(c->family,
- (char *)c->sockaddr + c->addr,
+ c->addr_text.len = ngx_sock_ntop(c->family, c->sockaddr,
c->addr_text.data, c->addr_text_max_len);
- if (c->addr_text.len == 0)
- return NGX_ERROR;
+
+ if (c->addr_text.len == 0) {
+ return NGX_ERROR;
+ }
ngx_test_null(ctx, ngx_pcalloc(c->pool, sizeof(ngx_http_log_ctx_t)),
NGX_ERROR);
@@ -133,6 +109,15 @@
}
#endif
+#if (HAVE_EDGE_EVENT)
+ if (ngx_event_flags & NGX_HAVE_EDGE_EVENT) {
+ if (ngx_add_event(ev, NGX_READ_EVENT, NGX_EDGE_EVENT) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+ return ngx_http_init_request(ev);
+ }
+#endif
+
#if (HAVE_AIO_EVENT)
if (ngx_event_flags & NGX_HAVE_AIO_EVENT) {
return ngx_http_init_request(ev);
@@ -147,8 +132,9 @@
static int ngx_http_init_request(ngx_event_t *ev)
{
- ngx_connection_t *c;
- ngx_http_request_t *r;
+ ngx_connection_t *c;
+ ngx_http_request_t *r;
+ ngx_http_conf_ctx_t *ctx;
c = (ngx_connection_t *) ev->data;
c->sent = 0;
@@ -179,6 +165,10 @@
ngx_pcalloc(r->pool, sizeof(void *) * ngx_http_max_module),
ngx_http_close_request(r));
+ ctx = (ngx_http_conf_ctx_t *) c->ctx;
+ r->srv_conf = ctx->srv_conf;
+ r->loc_conf = ctx->loc_conf;
+
r->headers_out.headers = ngx_create_table(r->pool, 10);
r->headers_out.content_length = -1;
r->headers_out.last_modified_time = -1;
@@ -195,7 +185,6 @@
int n, rc;
ngx_connection_t *c;
ngx_http_request_t *r;
- ngx_http_log_ctx_t *ctx;
c = (ngx_connection_t *) ev->data;
r = (ngx_http_request_t *) c->data;
@@ -283,8 +272,7 @@
static int ngx_http_process_request_line(ngx_http_request_t *r)
{
- int rc, len;
- char **request;
+ int rc;
ngx_connection_t *c;
ngx_http_log_ctx_t *ctx;
@@ -306,22 +294,6 @@
ngx_cpystrn(r->request_line.data, r->header_in->start,
r->request_line.len + 1);
- /* TEMP */
- ngx_test_null(request, ngx_push_array(c->requests),
- ngx_http_close_request(r));
-
- if (r->request_end)
- len = r->request_end - r->header_in->start + 1;
- else
- len = 1;
- c->requests_len += len;
- ngx_test_null(*request, ngx_palloc(c->pool, len),
- ngx_http_close_request(r));
- ngx_cpystrn(*request, r->header_in->start, len);
-
- ngx_log_debug(c->log, "REQ: '%s'" _ *request);
- /* */
-
if (r->uri_ext) {
r->exten.len = (r->args_start ? r->args_start - 1 : r->uri_end)
- r->uri_ext;
@@ -764,13 +736,13 @@
ngx_log_debug(ev->log, "http lingering close handler");
+ c = (ngx_connection_t *) ev->data;
+ r = (ngx_http_request_t *) c->data;
+
if (ev->timedout) {
return ngx_http_close_request(r);
}
- c = (ngx_connection_t *) ev->data;
- r = (ngx_http_request_t *) c->data;
-
timer = r->lingering_time - ngx_time();
if (timer <= 0) {
return ngx_http_close_request(r);
@@ -817,36 +789,8 @@
static int ngx_http_close_connection(ngx_event_t *ev)
{
- int i, len;
- char **requests, *requests_line, *prev, *new;
ngx_connection_t *c = (ngx_connection_t *) ev->data;
- if (c->requests->nelts > 1) {
- len = c->requests_len + c->requests->nelts * 2 - 1;
-
- ngx_test_null(requests_line, ngx_palloc(c->pool, len),
- ngx_event_close_connection(ev));
-
- requests = (char **) c->requests->elts;
- prev = requests_line;
- new = ngx_cpystrn(prev, requests[0], len);
- len -= new - prev;
- prev = new;
-
- for (i = 1; i < c->requests->nelts; i++) {
- new = ngx_cpystrn(prev, ", ", len);
- new = ngx_cpystrn(new, requests[i], len);
- len -= new - prev;
- prev = new;
- }
-
- } else {
- requests_line = * (char **) c->requests->elts;
- }
-
- ngx_log_error(NGX_LOG_INFO, c->log, 0,
- "REQUESTS: %d, '%s'", c->requests->nelts, requests_line);
-
return ngx_event_close_connection(ev);
}
diff --git a/src/http/ngx_http_get_time.c b/src/http/ngx_http_get_time.c
index d03e8b1..c83a5ba 100644
--- a/src/http/ngx_http_get_time.c
+++ b/src/http/ngx_http_get_time.c
@@ -5,7 +5,7 @@
#include <ngx_types.h>
-ngx_http_get_time(char *buf, time_t t)
+size_t ngx_http_get_time(char *buf, time_t t)
{
struct tm *tp;
diff --git a/src/http/ngx_http_header_filter.c b/src/http/ngx_http_header_filter.c
index 08369b7..282b82a 100644
--- a/src/http/ngx_http_header_filter.c
+++ b/src/http/ngx_http_header_filter.c
@@ -70,7 +70,7 @@
static int ngx_http_header_filter(ngx_http_request_t *r)
{
- int len, status, i;
+ int len, status, i;
time_t ims;
ngx_hunk_t *h;
ngx_chain_t *ch;
@@ -106,6 +106,9 @@
/* status line */
if (r->headers_out.status_line.len) {
len += r->headers_out.status_line.len;
+#if (NGX_SUPPRESS_WARN)
+ status = NGX_INVALID_ARRAY_INDEX;
+#endif
} else {
if (r->headers_out.status < NGX_HTTP_MOVED_PERMANENTLY) {
@@ -207,7 +210,8 @@
/* 2^64 is 20 characters */
if (r->headers_out.content_length >= 0) {
- h->last.mem += ngx_snprintf(h->last.mem, 49, "Content-Length: %u" CRLF,
+ h->last.mem += ngx_snprintf(h->last.mem, 49,
+ "Content-Length: " OFF_FMT CRLF,
r->headers_out.content_length);
}
diff --git a/src/http/ngx_http_output_filter.c b/src/http/ngx_http_output_filter.c
index 8b382e3..62756c8 100644
--- a/src/http/ngx_http_output_filter.c
+++ b/src/http/ngx_http_output_filter.c
@@ -59,12 +59,11 @@
int ngx_http_output_filter(ngx_http_request_t *r, ngx_hunk_t *hunk)
{
- int rc, once;
- size_t size;
- ssize_t n;
- ngx_chain_t *ce;
- ngx_http_output_filter_ctx_t *ctx;
- ngx_http_output_filter_conf_t *conf;
+ int rc, once;
+ size_t size;
+ ngx_chain_t *ce;
+ ngx_http_output_filter_ctx_t *ctx;
+ ngx_http_output_filter_conf_t *conf;
ctx = (ngx_http_output_filter_ctx_t *)
ngx_http_get_module_ctx(r->main ? r->main : r,
@@ -79,6 +78,10 @@
ctx->last = 1;
}
+#if (NGX_SUPPRESS_WARN)
+ rc = NGX_ALERT;
+#endif
+
for (once = 1; once || ctx->in; once = 0) {
/* input chain is not empty */
@@ -179,13 +182,12 @@
} else {
if (ctx->hunk == NULL) {
- if (hunk->type & NGX_HUNK_LAST) {
-
- conf = (ngx_http_output_filter_conf_t *)
+ conf = (ngx_http_output_filter_conf_t *)
ngx_http_get_module_loc_conf(
r->main ? r->main : r,
ngx_http_output_filter_module);
+ if (hunk->type & NGX_HUNK_LAST) {
size = hunk->last.mem - hunk->pos.mem;
if (size > conf->hunk_size) {
size = conf->hunk_size;
@@ -243,6 +245,14 @@
ctx->hunk->pos.mem = ctx->hunk->last.mem = ctx->hunk->start;
}
+#if (NGX_SUPPRESS_WARN)
+ if (rc == NGX_ALERT) {
+ ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
+ "ngx_http_output_filter: rc == NGX_ALERT");
+ return NGX_ERROR;
+ }
+#endif
+
if (rc == NGX_OK && ctx->last) {
return NGX_OK;
}
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index a741f09..f6d8409 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -304,6 +304,11 @@
return NGX_HTTP_PARSE_INVALID_REQUEST;
}
break;
+
+#if (NGX_SUPPRESS_WARN)
+ case sw_done:
+ break;
+#endif
}
}
@@ -490,6 +495,14 @@
return NGX_HTTP_PARSE_INVALID_HEADER;
}
break;
+
+#if (NGX_SUPPRESS_WARN)
+ case sw_done:
+ break;
+
+ case sw_header_done:
+ break;
+#endif
}
}
diff --git a/src/http/ngx_http_parse_time.c b/src/http/ngx_http_parse_time.c
index c236fd5..09e56b4 100644
--- a/src/http/ngx_http_parse_time.c
+++ b/src/http/ngx_http_parse_time.c
@@ -20,6 +20,11 @@
fmt = 0;
end = value + len;
+#if (NGX_SUPPRESS_WARN)
+ day = 32;
+ year = 2038;
+#endif
+
for (p = value; p < end; p++) {
if (*p == ',') {
break;
diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h
index f0c324e..d35382f 100644
--- a/src/os/unix/ngx_files.h
+++ b/src/os/unix/ngx_files.h
@@ -2,14 +2,15 @@
#define _NGX_FILES_H_INCLUDED_
-#include <sys/types.h>
-#include <sys/stat.h>
+#include <ngx_config.h>
-typedef int ngx_fd_t;
+#include <ngx_types.h>
+#include <ngx_file.h>
+
+
#define NGX_INVALID_FILE -1
#define NGX_FILE_ERROR -1
-typedef struct stat ngx_file_info_t;
#define ngx_open_file open
@@ -18,6 +19,7 @@
#define ngx_close_file close
#define ngx_close_file_n "close()"
+ssize_t ngx_read_file(ngx_file_t *file, char *buf, size_t size, off_t offset);
#define ngx_read_file_n "read()"
#define NGX_FILE_RDONLY O_RDONLY
diff --git a/src/os/unix/ngx_types.h b/src/os/unix/ngx_types.h
index 9919e90..bf61ae2 100644
--- a/src/os/unix/ngx_types.h
+++ b/src/os/unix/ngx_types.h
@@ -4,6 +4,14 @@
#include <ngx_config.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+
+typedef int ngx_fd_t;
+typedef struct stat ngx_file_info_t;
+
+
#ifdef SOLARIS
diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h
index f5e50cc..a8970a2 100644
--- a/src/os/win32/ngx_files.h
+++ b/src/os/win32/ngx_files.h
@@ -4,19 +4,18 @@
#include <ngx_config.h>
+#include <ngx_types.h>
+#include <ngx_file.h>
+
/* INVALID_FILE_ATTRIBUTES specified but never defined at least in VC6SP2 */
#ifndef INVALID_FILE_ATTRIBUTES
#define INVALID_FILE_ATTRIBUTES 0xFFFFFFFF
#endif
-typedef HANDLE ngx_fd_t;
#define NGX_INVALID_FILE INVALID_HANDLE_VALUE
#define NGX_FILE_ERROR 0
-typedef unsigned __int64 off_t;
-
-typedef BY_HANDLE_FILE_INFORMATION ngx_file_info_t;
#define ngx_open_file(name, flags) \
@@ -56,6 +55,7 @@
- 116444736000000000) / 10000000)
+ssize_t ngx_read_file(ngx_file_t *file, char *buf, size_t size, off_t offset);
#define ngx_read_file_n "ReadFile()"
diff --git a/src/os/win32/ngx_types.h b/src/os/win32/ngx_types.h
index c9e7415..d5f0d92 100644
--- a/src/os/win32/ngx_types.h
+++ b/src/os/win32/ngx_types.h
@@ -5,10 +5,15 @@
#include <ngx_config.h>
-typedef int ssize_t;
-typedef long time_t;
+typedef unsigned __int32 u_int32_t;
-typedef unsigned __int32 u_int32_t;
+typedef int ssize_t;
+typedef long time_t;
+
+typedef HANDLE ngx_fd_t;
+typedef unsigned __int64 off_t;
+typedef BY_HANDLE_FILE_INFORMATION ngx_file_info_t;
+