Mercurial > hg > nginx
changeset 1773:d85879105d35
%*s format
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 24 Dec 2007 17:05:16 +0000 |
parents | 25c93614e6b9 |
children | 68d21fd1dc64 |
files | src/core/ngx_string.c |
diffstat | 1 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/core/ngx_string.c +++ b/src/core/ngx_string.c @@ -63,6 +63,7 @@ ngx_pstrdup(ngx_pool_t *pool, ngx_str_t * %V ngx_str_t * * %v ngx_variable_value_t * * %s null-terminated string + * %*s length and string * %Z '\0' * %N '\n' * %c char @@ -112,7 +113,7 @@ ngx_vsnprintf(u_char *buf, size_t max, c * but icc issues the warning */ int d; - size_t len; + size_t len, slen; uint32_t ui32; int64_t i64; uint64_t ui64; @@ -146,6 +147,7 @@ ngx_vsnprintf(u_char *buf, size_t max, c sign = 1; hexadecimal = 0; max_width = 0; + slen = 0; p = temp + NGX_INT64_LEN; @@ -179,6 +181,11 @@ ngx_vsnprintf(u_char *buf, size_t max, c fmt++; continue; + case '*': + slen = va_arg(args, u_int); + fmt++; + continue; + default: break; } @@ -214,9 +221,15 @@ ngx_vsnprintf(u_char *buf, size_t max, c case 's': p = va_arg(args, u_char *); - while (*p && buf < last) { - *buf++ = *p++; + if (slen == 0) { + while (*p && buf < last) { + *buf++ = *p++; + } + + } else { + buf = ngx_cpymem(buf, p, slen); } + fmt++; continue;