nginx-0.0.1-2002-12-19-10:08:55 import
diff --git a/src/core/ngx_config_file.c b/src/core/ngx_config_file.c
new file mode 100644
index 0000000..b2b4b81
--- /dev/null
+++ b/src/core/ngx_config_file.c
@@ -0,0 +1,314 @@
+
+#include <ngx_config.h>
+
+#include <ngx_core.h>
+
+#include <ngx_config_file.h>
+
+
+static int argument_number[] = {
+ NGX_CONF_NOARGS,
+ NGX_CONF_TAKE1,
+ NGX_CONF_TAKE2
+};
+
+#if 0
+
+int ngx_conf_parse(ngx_conf_t *cf, char *filename)
+{
+ int rc;
+ char *error;
+ ngx_fd_t fd;
+ ngx_conf_file_t *prev;
+
+ if (filename) {
+
+ fd = ngx_open_file(filename, NGX_FILE_RDONLY);
+ if (fd == NGX_INVALID_FILE) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, ngx_errno,
+ "ngx_conf_open: "
+ ngx_open_file_n " %s failed", filename);
+ return NGX_ERROR;
+ }
+
+ prev = cf->file;
+ ngx_test_null(cf->file, ngx_palloc(cf->pool, sizeof(ngx_conf_file_t)),
+ NGX_ERROR);
+
+ cf->file->fd = fd;
+ cf->file->name = filename;
+ cf->file->line = 1;
+ cf->file->pos = 0;
+ }
+
+ for ( ;; ) {
+ rc = ngx_conf_read_token(cf);
+
+ /* ??? NGX_OK, NGX_ERROR, NGX_CONF_FILE_DONE, NGX_CONF_BLOCK_DONE */
+
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ /* ????
+ "listen address:port;"
+ "location /images/ {" */
+
+ if (cf->handler) {
+
+ if (*(cf->handler)(cf) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ continue;
+ }
+
+ cmd = ngx_conf_find_token(cf);
+ if (cmd == NULL) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "unknown directive \"%s\" in %s:%d",
+ cf->name, cf->file->name, cf->file->line);
+ return NGX_ERROR;
+ }
+
+ if (cmd->type & argument_number[cf->args->nelts]) {
+ error = cmd->set(cf, cmd->offset, cf->args);
+
+ if (error) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "%s in directive \"%s\" in %s:%d",
+ error, cf->name, cf->file->name, cf->file->line);
+ return NGX_ERROR;
+ }
+ }
+
+#if 0
+ if (cmd->type == NGX_CONF_CONTAINER) {
+ ngx_conf_parse(cf, cmd->container, NULL);
+
+ } else if (cmd->type == NGX_CONF_FLAG) {
+
+ if (cf->args->nelts != 1) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "invalid number of arguments "
+ "in directive \"%s\" in %s:%d",
+ cf->name, cf->file->name, cf->file->line);
+ return NGX_ERROR;
+ }
+
+ if (ngx_strcasecmp(cf->args->elts[0], "on") == 0) {
+ flag = 1;
+
+ } else if (ngx_strcasecmp(cf->args->elts[0], "off") == 0) {
+ flag = 0;
+
+ } else {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "invalid flag in directive \"%s\" in %s:%d",
+ cf->name, cf->file->name, cf->file->line);
+ return NGX_ERROR;
+ }
+
+ rv = cmd->set(cf, cmd->offset, flag);
+ if (rv) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "%s in directive \"%s\" in %s:%d",
+ rv, cf->name, cf->file->name, cf->file->line);
+ return NGX_ERROR;
+ }
+
+ } else if (cmd->type & argument_number[args->nelts]) {
+ rv = cmd->set(cf, cmd->offset, cf->args);
+ if (rv) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "%s in directive \"%s\" in %s:%d",
+ rv, cf->name, cf->file->name, cf->file->line);
+ return NGX_ERROR;
+ }
+
+ } else {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "invalid number of arguments "
+ "in directive \"%s\" in %s:%d",
+ cf->name, cf->file->name, cf->file->line);
+ return NGX_ERROR;
+ }
+ }
+#endif
+
+ if (filename) {
+ cf->file = prev;
+
+ if (ngx_close_file(fd) == NGX_FILE_ERROR) {
+ ngx_log_error(NGX_LOG_ERR, cf->log, ngx_errno,
+ ngx_close_file_n " %s failed", cf->name);
+ return NGX_ERROR;
+ }
+ }
+
+ return NGX_OK;
+}
+
+#endif
+
+#if 0
+
+int ngx_conf_read_token(ngx_conf_t *cf)
+{
+ char *start, ch, *src, *dst;
+ int n, need_space, last_space, len, quoted, s_quoted, d_quoted;
+ ngx_hunk_t *h;
+
+ need_space = 0;
+ last_space = 1;
+ len = 0;
+ quoted = s_quoted = d_quoted = 0;
+
+ cf->args->nelts = 0;
+ h = cf->conf_file->hunk;
+
+ for (start = h->pos.mem; /* end_of_file */ ; h->pos.mem++) {
+
+ if (h->pos.mem >= h->last.mem) {
+ if (h->pos.mem - start) {
+ ngx_memcpy(h->start, start, h->pos.mem - start);
+ }
+
+ n = ngx_read_file(cf->conf_file->file,
+ h->start + (h->pos.mem - start),
+ h->end - (h->start + (h->pos.mem - start)),
+ cf->conf_file->file.offset);
+
+ if (n == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ cf->conf_file.file.offset += n;
+ h->pos.mem = h->start + (h->pos.mem - start);
+ start = h->start;
+ h->last.mem = h->pos.mem + n;
+ }
+
+ ch = *h->pos.mem;
+
+ if (ch == LF) {
+ cf->conf_file->line++;
+ }
+
+ if (quoted) {
+ quoted = 0;
+ continue;
+ }
+
+ len++;
+
+ if (last_space) {
+ start = h->pos.mem;
+
+ if (ch == ' ' || ch == '\t' || ch == CR || ch == LF) {
+ start++;
+ continue;
+ }
+ }
+
+ if (ch = '\\') {
+ quoted = 1;
+ continue;
+ }
+
+ if (d_quoted) {
+
+ if (ch == '"') {
+ d_quoted = 0;
+ need_space = 1;
+ last_space = 1;
+ continue;
+ }
+
+ } else if (s_quoted) {
+
+ if (ch == '\'') {
+ s_quoted = 0;
+ need_space = 1;
+ last_space = 1;
+ continue;
+ }
+
+ } else {
+
+ if (ch == ' ' || ch == '\t' || ch == CR || ch == LF) {
+ ngx_test_null(word, ngx_push_array(cf->args), NGX_ERROR);
+ ngx_test_null(word->data, ngx_palloc(cf->temp_pool, len + 1),
+ NGX_ERROR);
+ word->len = len;
+
+ for (dst = word->data, src = start; src < h->pos; /* void */) {
+ if (*src == '\\')
+ src++;
+ *dst++ = *src++;
+ }
+ *dst = '\0';
+
+ need_space = 0;
+ last_space = 1;
+ continue;
+ }
+
+ if (need_space) {
+ return NGX_ERROR;
+ }
+
+ if (ch == ';') {
+ return NGX_OK;
+ }
+
+ if (ch == '{') {
+ return NGX_OK;
+ }
+
+ if (ch == '}') {
+ return NGX_BLOCK_DONE;
+ }
+
+ if (last_space) {
+ if (ch == '"') {
+ d_quoted = 1;
+ continue;
+ }
+
+ if (ch == '\'') {
+ s_quoted = 1;
+ continue;
+ }
+ }
+
+ last_space = 0;
+ }
+ }
+}
+
+#endif
+
+char *ngx_conf_set_size_slot(char *conf, int offset, char *value)
+{
+ int size;
+
+ size = atoi(value);
+ if (size < 0)
+ return "value must be greater or equal to zero";
+
+ *(int *) (conf + offset) = size;
+ return NULL;
+}
+
+char *ngx_conf_set_time_slot(char *conf, int offset, char *value)
+{
+ int size;
+
+ size = atoi(value);
+ if (size < 0)
+ return "value must be greater or equal to zero";
+
+ *(int *) (conf + offset) = size;
+ return NULL;
+}