diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-04-28 15:06:39 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-04-28 15:06:39 +0000 |
commit | 1d8d9eee942ab1d2565048e00d1817147c49f48c (patch) | |
tree | 05b00d2609f9a7264f2356b559353b466d1be0d4 /src/core/ngx_conf_file.c | |
parent | a09f08dbab9f06b81c1224a32607b26292015c8b (diff) | |
download | nginx-1d8d9eee942ab1d2565048e00d1817147c49f48c.tar.gz nginx-1d8d9eee942ab1d2565048e00d1817147c49f48c.zip |
nginx-0.0.1-2003-04-28-19:06:39 import
Diffstat (limited to 'src/core/ngx_conf_file.c')
-rw-r--r-- | src/core/ngx_conf_file.c | 78 |
1 files changed, 72 insertions, 6 deletions
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; } |