From 1d8d9eee942ab1d2565048e00d1817147c49f48c Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Mon, 28 Apr 2003 15:06:39 +0000 Subject: nginx-0.0.1-2003-04-28-19:06:39 import --- src/core/ngx_conf_file.c | 78 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 6 deletions(-) (limited to 'src/core/ngx_conf_file.c') diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c index 12537bd63..45533be75 100644 --- a/src/core/ngx_conf_file.c +++ b/src/core/ngx_conf_file.c @@ -432,16 +432,34 @@ char *ngx_conf_set_str_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) { - int size; + int size, len, scale; + char last; ngx_str_t *value; value = (ngx_str_t *) cf->args->elts; - size = atoi(value[1].data); - if (size < 0) { + len = value[1].len; + last = value[1].data[len - 1]; + + if (last == 'K' || last == 'k') { + len--; + scale = 1024; + + } else if (last == 'M' || last == 'm') { + len--; + scale = 1024 * 1024; + + } else { + scale = 1; + } + + size = ngx_atoi(value[1].data, len); + if (size == NGX_ERROR) { return "value must be greater or equal to zero"; } + size *= scale; + *(int *) (conf + cmd->offset) = size; return NGX_CONF_OK; @@ -450,17 +468,65 @@ char *ngx_conf_set_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) char *ngx_conf_set_time_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) { - int size; + int size, len, scale; + char last; ngx_str_t *value; value = (ngx_str_t *) cf->args->elts; - size = atoi(value[1].data); + len = value[1].len; + last = value[1].data[len - 1]; + + if (last == 'm') { + len--; + scale = 1000 * 60; + + } else if (last == 'h') { + len--; + scale = 1000 * 60 * 60; + + } else if (last == 'd') { + len--; + scale = 1000 * 60 * 60 * 24; + + } else if (last == 'w') { + len--; + scale = 1000 * 60 * 60 * 24 * 7; + +#if 0 /* overflow */ + + } else if (last == 'M') { + len--; + scale = 1000 * 60 * 60 * 24 * 30; + + } else if (last == 'y') { + len--; + scale = 1000 * 60 * 60 * 24 * 365; + +#endif + + } else if (last == 's') { + len--; + if (value[1].data[len - 1] == 'm') { + len--; + scale = 1; + + } else { + scale = 1000; + } + + } else { + scale = 1000; + } + + size = ngx_atoi(value[1].data, len); if (size < 0) { return "value must be greater or equal to zero"; } - *(int *) (conf + cmd->offset) = size * 1000; + size *= scale; + + *(int *) (conf + cmd->offset) = size; return NGX_CONF_OK; } -- cgit v1.2.3