%*s format
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
index f878c55..d9a5480 100644
--- a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -63,6 +63,7 @@
* %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 @@
* 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 @@
sign = 1;
hexadecimal = 0;
max_width = 0;
+ slen = 0;
p = temp + NGX_INT64_LEN;
@@ -179,6 +181,11 @@
fmt++;
continue;
+ case '*':
+ slen = va_arg(args, u_int);
+ fmt++;
+ continue;
+
default:
break;
}
@@ -214,9 +221,15 @@
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;