nginx-0.0.1-2003-10-22-20:38:26 import
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index c26aa17..70da2dc 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -6,10 +6,20 @@
#define MAX_CONF_ERRSTR 256
+/* Ten fixed arguments */
+
static int argument_number[] = {
NGX_CONF_NOARGS,
NGX_CONF_TAKE1,
- NGX_CONF_TAKE2
+ NGX_CONF_TAKE2,
+ NGX_CONF_TAKE3,
+ NGX_CONF_TAKE4,
+ NGX_CONF_TAKE5,
+ NGX_CONF_TAKE6,
+ NGX_CONF_TAKE7,
+ NGX_CONF_TAKE8,
+ NGX_CONF_TAKE9,
+ NGX_CONF_TAKE10
};
static int ngx_conf_read_token(ngx_conf_t *cf);
@@ -146,17 +156,9 @@
/* is the directive's argument count right ? */
- if (cmd->type & argument_number[cf->args->nelts - 1]) {
+ if (cmd->type & NGX_CONF_ANY) {
valid = 1;
- } else if (cmd->type & NGX_CONF_1MORE) {
-
- if (cf->args->nelts != 1) {
- valid = 1;
- } else {
- valid = 0;
- }
-
} else if (cmd->type & NGX_CONF_FLAG) {
if (cf->args->nelts == 2) {
@@ -165,7 +167,18 @@
valid = 0;
}
- } else if (cmd->type & NGX_CONF_ANY) {
+ } else if (cmd->type & NGX_CONF_1MORE) {
+
+ if (cf->args->nelts != 1) {
+ valid = 1;
+ } else {
+ valid = 0;
+ }
+
+ } else if (cf->args->nelts <= 10
+ && (cmd->type
+ & argument_number[cf->args->nelts - 1]))
+ {
valid = 1;
} else {
@@ -573,8 +586,7 @@
value = (ngx_str_t *) cf->args->elts;
- field->len = value[1].len;
- field->data = value[1].data;
+ *field = value[1];
return NGX_CONF_OK;
}
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index 3164c6c..66ca2a9 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -15,6 +15,18 @@
#define NGX_CONF_NOARGS 0x00000001
#define NGX_CONF_TAKE1 0x00000002
#define NGX_CONF_TAKE2 0x00000004
+#define NGX_CONF_TAKE3 0x00000008
+#define NGX_CONF_TAKE4 0x00000010
+#define NGX_CONF_TAKE5 0x00000020
+#define NGX_CONF_TAKE6 0x00000040
+#define NGX_CONF_TAKE7 0x00000080
+#define NGX_CONF_TAKE8 0x00000100
+#define NGX_CONF_TAKE9 0x00000200
+#define NGX_CONF_TAKE10 0x00000400
+
+#define NGX_CONF_TAKE1234 (NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3 \
+ |NGX_CONF_TAKE4)
+
#define NGX_CONF_ARGS_NUMBER 0x0000ffff
#define NGX_CONF_ANY 0x00010000
#define NGX_CONF_1MORE 0x00020000
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
index 455b785..538adff 100644
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -164,3 +164,44 @@
return ngx_temp_number++;
}
+
+
+char *ngx_conf_set_path_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ char *p = conf;
+
+ int i, n;
+ ngx_str_t *value;
+ ngx_path_t *path, **pp;
+
+ pp = (ngx_path_t **) (p + cmd->offset);
+
+ if (*pp) {
+ return "is duplicate";
+ }
+
+ ngx_test_null(path, ngx_pcalloc(cf->pool, sizeof(ngx_path_t)), NULL);
+
+ *pp = path;
+
+ value = (ngx_str_t *) cf->args->elts;
+
+ path->name = value[1];
+
+ path->len = 0;
+
+ for (i = 0, n = 2; n < cf->args->nelts; i++, n++) {
+ path->level[i] = ngx_atoi(value[n].data, value[n].len);
+ if (path->level[i] == NGX_ERROR || path->level[i] == 0) {
+ return "invalid value";
+ }
+
+ path->len += path->level[i] + 1;
+ }
+
+ while (i < 3) {
+ path->level[i++] = 0;
+ }
+
+ return NULL;
+}
diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h
index 6f521c2..ef3f783 100644
--- a/src/core/ngx_file.h
+++ b/src/core/ngx_file.h
@@ -34,5 +34,24 @@
void ngx_init_temp_number();
int ngx_next_temp_number(int collision);
+char *ngx_conf_set_path_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+
+
+#define ngx_conf_merge_path_value(conf, prev, path, l1, l2, l3, pool) \
+ if (conf == NULL) { \
+ if (prev == NULL) { \
+ ngx_test_null(conf, ngx_palloc(pool, sizeof(ngx_path_t)), NULL); \
+ conf->name.len = sizeof(path) - 1; \
+ conf->name.data = path; \
+ conf->level[0] = l1; \
+ conf->level[1] = l2; \
+ conf->level[2] = l3; \
+ conf->len = l1 + l2 + l3 + l1 ? 1:0 + l2 ? 1:0 + l3 ? 1:0; \
+ } else { \
+ conf = prev; \
+ } \
+ }
+
+
#endif /* _NGX_FILE_H_INCLUDED_ */
diff --git a/src/core/ngx_hunk.c b/src/core/ngx_hunk.c
index cd21830..100bc62 100644
--- a/src/core/ngx_hunk.c
+++ b/src/core/ngx_hunk.c
@@ -99,26 +99,26 @@
}
-int ngx_chain_add_copy(ngx_pool_t *pool, ngx_chain_t **ch, ngx_chain_t *in)
+int ngx_chain_add_copy(ngx_pool_t *pool, ngx_chain_t **chain, ngx_chain_t *in)
{
- ngx_chain_t *ce, **le;
+ ngx_chain_t *cl, **ll;
- le = ch;
+ ll = chain;
- for (ce = *ch; ce; ce = ce->next) {
- le = &ce->next;
+ for (cl = *chain; cl; cl = cl->next) {
+ ll = &cl->next;
}
while (in) {
- ngx_test_null(ce, ngx_alloc_chain_entry(pool), NGX_ERROR);
+ ngx_test_null(cl, ngx_alloc_chain_link(pool), NGX_ERROR);
- ce->hunk = in->hunk;
- *le = ce;
- le = &ce->next;
+ cl->hunk = in->hunk;
+ *ll = cl;
+ ll = &cl->next;
in = in->next;
}
- *le = NULL;
+ *ll = NULL;
return NGX_OK;
}
diff --git a/src/core/ngx_hunk.h b/src/core/ngx_hunk.h
index 940241b..abbdcfe 100644
--- a/src/core/ngx_hunk.h
+++ b/src/core/ngx_hunk.h
@@ -99,31 +99,30 @@
#define ngx_alloc_hunk(pool) ngx_palloc(pool, sizeof(ngx_hunk_t))
#define ngx_calloc_hunk(pool) ngx_pcalloc(pool, sizeof(ngx_hunk_t))
-#define ngx_alloc_chain_entry(pool) ngx_palloc(pool, sizeof(ngx_chain_t))
-#define ngx_add_hunk_to_chain(chain, h, pool, error) \
+#define ngx_alloc_chain_link(pool) ngx_palloc(pool, sizeof(ngx_chain_t))
+
+
+#define ngx_alloc_link_and_set_hunk(chain, h, pool, error) \
do { \
- ngx_test_null(chain, ngx_alloc_chain_entry(pool), error); \
+ ngx_test_null(chain, ngx_alloc_chain_link(pool), error); \
chain->hunk = h; \
chain->next = NULL; \
} while (0);
-#define ngx_alloc_ce_and_set_hunk ngx_add_hunk_to_chain
-
-#define ngx_chain_add_ce(chain, last, ce) \
+#define ngx_chain_add_link(chain, last, cl) \
if (chain) { \
- *last = ce; \
+ *last = cl; \
} else { \
- chain = ce; \
+ chain = cl; \
} \
- last = &ce->next
+ last = &cl->next
-int ngx_chain_add_copy(ngx_pool_t *pool, ngx_chain_t **ch, ngx_chain_t *in);
+int ngx_chain_add_copy(ngx_pool_t *pool, ngx_chain_t **chain, ngx_chain_t *in);
void ngx_chain_update_chains(ngx_chain_t **free, ngx_chain_t **busy,
ngx_chain_t **out, ngx_hunk_tag_t tag);
-
#endif /* _NGX_HUNK_H_INCLUDED_ */
diff --git a/src/core/ngx_listen.c b/src/core/ngx_listen.c
deleted file mode 100644
index 873b18d..0000000
--- a/src/core/ngx_listen.c
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#include <ngx_config.h>
-#include <ngx_types.h>
-#include <ngx_errno.h>
-#include <ngx_log.h>
-#include <ngx_listen.h>
-
-ngx_socket_t ngx_listen(struct sockaddr *addr, int backlog,
- ngx_log_t *log, char *addr_text)
-{
- ngx_socket_t s;
- int reuseaddr = 1;
-#if (WIN32)
- unsigned long nb = 1;
-#endif
-
- if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)
- ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, "socket failed");
-
- if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
- (const void *) &reuseaddr, sizeof(int)) == -1)
- ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- "ngx_listen: setsockopt (SO_REUSEADDR) failed");
-
-#if (WIN32)
- if (ioctlsocket(s, FIONBIO, &nb) == -1)
- ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- "ngx_listen: ioctlsocket (FIONBIO) failed");
-#else
- if (fcntl(s, F_SETFL, O_NONBLOCK) == -1)
- ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- "ngx_listen: fcntl (O_NONBLOCK) failed");
-#endif
-
- if (bind(s, (struct sockaddr *) addr, sizeof(struct sockaddr_in)) == -1)
- ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- "ngx_listen: bind to %s failed", addr_text);
-
- if (listen(s, backlog) == -1)
- ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- "ngx_listen: listen to %s failed", addr_text);
-
- return s;
-}
diff --git a/src/core/ngx_listen.h b/src/core/ngx_listen.h
deleted file mode 100644
index 1824ef1..0000000
--- a/src/core/ngx_listen.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef _NGX_LISTEN_H_INCLUDED_
-#define _NGX_LISTEN_H_INCLUDED_
-
-
-#include <ngx_config.h>
-#include <ngx_log.h>
-#include <ngx_types.h>
-#include <ngx_socket.h>
-#include <ngx_connection.h>
-
-typedef struct {
- ngx_socket_t fd;
-
- struct sockaddr *sockaddr;
- socklen_t socklen; /* size of sockaddr */
- int addr; /* offset to address in sockaddr */
- int addr_text_max_len;
- ngx_str_t addr_text;
-
- int family;
- int type;
- int protocol;
- int flags; /* Winsock2 flags */
-
- void (*handler)(ngx_connection_t *c); /* handler of accepted
- connection */
- void *ctx; /* ngx_http_conf_ctx_t, for example */
- 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
- of the deferred accept */
-
- unsigned bound:1; /* already bound */
- unsigned inherited:1; /* inherited from previous process */
- unsigned nonblocking_accept:1;
- unsigned nonblocking:1;
-#if 0
- unsigned overlapped:1; /* Winsock2 overlapped */
-#endif
- unsigned shared:1; /* shared between threads or processes */
-#if (HAVE_DEFERRED_ACCEPT)
- unsigned deferred_accept:1;
-#endif
-} ngx_listen_t;
-
-
-extern ngx_array_t ngx_listening_sockets;
-
-
-#endif /* _NGX_LISTEN_H_INCLUDED_ */
diff --git a/src/core/ngx_write_chain.c b/src/core/ngx_write_chain.c
deleted file mode 100644
index 17af403..0000000
--- a/src/core/ngx_write_chain.c
+++ /dev/null
@@ -1,50 +0,0 @@
-
-#include <ngx_config.h>
-
-#include <ngx_core.h>
-#include <ngx_types.h>
-#include <ngx_alloc.h>
-#include <ngx_array.h>
-#include <ngx_hunk.h>
-#include <ngx_connection.h>
-
-
-ngx_chain_t *(*ngx_write_chain_proc)(ngx_connection_t *c, ngx_chain_t *in);
-
-
-ngx_chain_t *ngx_write_chain(ngx_connection_t *c, ngx_chain_t *in, off_t flush)
-{
-#if (NGX_EVENT)
-
- return (*ngx_write_chain_proc)(c, in);
-
-#elif (NGX_EVENT_THREAD)
-
- off_t sent;
- ngx_chain_t *rc;
-
- sent = flush - c->sent;
-
- do {
- rc = (*ngx_write_chain_proc)(c, in);
-
- if (rc == NGX_CHAIN_ERROR && rc == NULL) {
- return rc;
- }
-
- } while (c->thread && flush > c->sent - sent);
-
-#else
-
- ngx_chain_t *rc;
-
- do {
-
- rc = (*ngx_write_chain_proc)(c, in);
-
- } while (rc != NGX_CHAIN_ERROR && rc != NULL);
-
- return rc;
-
-#endif
-}