Mercurial > hg > nginx-quic
diff src/core/ngx_conf_file.c @ 84:fab4cb00fe5b
nginx-0.0.1-2003-05-06-21:03:16 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 06 May 2003 17:03:16 +0000 |
parents | a7e45c45a95c |
children | 674d333f4296 |
line wrap: on
line diff
--- a/src/core/ngx_conf_file.c +++ b/src/core/ngx_conf_file.c @@ -441,21 +441,26 @@ char *ngx_conf_set_size_slot(ngx_conf_t len = value[1].len; last = value[1].data[len - 1]; - if (last == 'K' || last == 'k') { + switch (last) { + case 'K': + case 'k': len--; scale = 1024; + break; - } else if (last == 'M' || last == 'm') { + case 'M': + case 'm': len--; scale = 1024 * 1024; + break; - } else { + default: scale = 1; } size = ngx_atoi(value[1].data, len); if (size == NGX_ERROR) { - return "value must be greater or equal to zero"; + return "invalid value"; } size *= scale; @@ -466,71 +471,200 @@ char *ngx_conf_set_size_slot(ngx_conf_t } -char *ngx_conf_set_time_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) +char *ngx_conf_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) { - int size, len, scale; - char last; + int size, total, len, scale, i; + u_int max; + char last, *start; ngx_str_t *value; value = (ngx_str_t *) cf->args->elts; + start = value[1].data; + len = 0; + total = 0; - len = value[1].len; - last = value[1].data[len - 1]; + for (i = 0; /* void */ ; i++) { - if (last == 'm') { - len--; - scale = 1000 * 60; + if (i < value[1].len) { + if (value[1].data[i] != ' ') { + len++; + continue; + } - } else if (last == 'h') { - len--; - scale = 1000 * 60 * 60; + if (value[1].data[i] == ' ' && len == 0) { + start = &value[1].data[i + 1]; + continue; + } + } - } else if (last == 'd') { - len--; - scale = 1000 * 60 * 60 * 24; + if (len == 0) { + break; + } - } else if (last == 'w') { - len--; - scale = 1000 * 60 * 60 * 24 * 7; + last = value[1].data[i - 1]; -#if 0 /* overflow */ + switch (last) { + case 'm': + len--; + max = 35791; + scale = 1000 * 60; + break; - } else if (last == 'M') { - len--; - scale = 1000 * 60 * 60 * 24 * 30; - - } else if (last == 'y') { - len--; - scale = 1000 * 60 * 60 * 24 * 365; + case 'h': + len--; + max = 596; + scale = 1000 * 60 * 60; + break; -#endif + case 'd': + len--; + max = 24; + scale = 1000 * 60 * 60 * 24; + break; - } else if (last == 's') { - len--; - if (value[1].data[len - 1] == 'm') { + case 's': len--; - scale = 1; + if (value[1].data[i - 2] == 'm') { + len--; + max = 2147483647; + scale = 1; + break; + } + /* fall thru */ - } else { + default: + max = 2147483; scale = 1000; } - } else { - scale = 1000; + size = ngx_atoi(start, len); + if (size < 0) { + return "invalid value"; + } + + if ((u_int) size > max) { + return "value must be less than 597 hours"; + } + + total += size * scale; + + if (i >= value[1].len) { + break; + } + + len = 0; + start = &value[1].data[i + 1]; } - size = ngx_atoi(value[1].data, len); - if (size < 0) { - return "value must be greater or equal to zero"; - } - - size *= scale; - - *(int *) (conf + cmd->offset) = size; + *(int *) (conf + cmd->offset) = total; return NGX_CONF_OK; } + +char *ngx_conf_set_sec_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) +{ + int size, total, len, scale, i; + u_int max; + char last, *start; + ngx_str_t *value; + + value = (ngx_str_t *) cf->args->elts; + start = value[1].data; + len = 0; + total = 0; + + for (i = 0; /* void */ ; i++) { + + if (i < value[1].len) { + if (value[1].data[i] != ' ') { + len++; + continue; + } + + if (value[1].data[i] == ' ' && len == 0) { + start = &value[1].data[i + 1]; + continue; + } + } + + if (len == 0) { + break; + } + + last = value[1].data[i - 1]; + + switch (last) { + case 'm': + len--; + max = 35791394; + scale = 60; + break; + + case 'h': + len--; + max = 596523; + scale = 60 * 60; + break; + + case 'd': + len--; + max = 24855; + scale = 60 * 60 * 24; + break; + + case 'w': + len--; + max = 3550; + scale = 60 * 60 * 24 * 7; + break; + + case 'M': + len--; + max = 828; + scale = 60 * 60 * 24 * 30; + break; + + case 'y': + len--; + max = 68; + scale = 60 * 60 * 24 * 365; + break; + + case 's': + len--; + /* fall thru */ + + default: + max = 2147483647; + scale = 1; + } + + size = ngx_atoi(start, len); + if (size < 0) { + return "invalid value"; + } + + if ((u_int) size > max) { + return "value must be less than 68 years"; + } + + total += size * scale; + + if (i >= value[1].len) { + break; + } + + len = 0; + start = &value[1].data[i + 1]; + } + + *(int *) (conf + cmd->offset) = total; + + return NGX_CONF_OK; +} + + char *ngx_conf_unsupported(ngx_conf_t *cf, ngx_command_t *cmd, char *conf) { return "unsupported on this platform";