diff options
Diffstat (limited to 'src/core/ngx_string.c')
-rw-r--r-- | src/core/ngx_string.c | 81 |
1 files changed, 80 insertions, 1 deletions
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c index fdb59fd9a..a1f593f96 100644 --- a/src/core/ngx_string.c +++ b/src/core/ngx_string.c @@ -34,7 +34,8 @@ ngx_pstrdup(ngx_pool_t *pool, ngx_str_t *src) { u_char *dst; - if (!(dst = ngx_palloc(pool, src->len))) { + dst = ngx_palloc(pool, src->len); + if (dst == NULL) { return NULL; } @@ -489,6 +490,84 @@ ngx_atoi(u_char *line, size_t n) } +ssize_t +ngx_atosz(u_char *line, size_t n) +{ + ssize_t value; + + if (n == 0) { + return NGX_ERROR; + } + + for (value = 0; n--; line++) { + if (*line < '0' || *line > '9') { + return NGX_ERROR; + } + + value = value * 10 + (*line - '0'); + } + + if (value < 0) { + return NGX_ERROR; + + } else { + return value; + } +} + + +off_t +ngx_atoof(u_char *line, size_t n) +{ + off_t value; + + if (n == 0) { + return NGX_ERROR; + } + + for (value = 0; n--; line++) { + if (*line < '0' || *line > '9') { + return NGX_ERROR; + } + + value = value * 10 + (*line - '0'); + } + + if (value < 0) { + return NGX_ERROR; + + } else { + return value; + } +} + + +time_t +ngx_atotm(u_char *line, size_t n) +{ + time_t value; + + if (n == 0) { + return NGX_ERROR; + } + + for (value = 0; n--; line++) { + if (*line < '0' || *line > '9') { + return NGX_ERROR; + } + + value = value * 10 + (*line - '0'); + } + + if (value < 0) { + return NGX_ERROR; + + } else { + return value; + } +} + + ngx_int_t ngx_hextoi(u_char *line, size_t n) { |