diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2009-02-04 15:03:12 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2009-02-04 15:03:12 +0000 |
commit | c4a9c79e287af898f59ed133a4a67e688c0f9569 (patch) | |
tree | 58f415d415000c0c04787c922a399e0949f4b1e8 | |
parent | 7f2d38d966182199ee3eee0cf54ae33d1c857fc6 (diff) | |
download | php-git-c4a9c79e287af898f59ed133a4a67e688c0f9569.tar.gz |
Syn spprintf fix with that of 5.3 and above
-rw-r--r-- | configure.in | 1 | ||||
-rw-r--r-- | main/spprintf.c | 13 |
2 files changed, 11 insertions, 3 deletions
diff --git a/configure.in b/configure.in index fd8ae48320..419b3f9736 100644 --- a/configure.in +++ b/configure.in @@ -579,6 +579,7 @@ strcoll \ strdup \ strerror \ strftime \ +strnlen \ strptime \ strstr \ strtok_r \ diff --git a/main/spprintf.c b/main/spprintf.c index aeecc6ca70..b21e1fe144 100644 --- a/main/spprintf.c +++ b/main/spprintf.c @@ -180,6 +180,13 @@ /* }}} */ +#if !HAVE_STRNLEN +static size_t strnlen(const char *s, size_t maxlen) { + char *r = memchr(s, '\0', maxlen); + return r ? r-s : maxlen; +} +#endif + /* * Do format conversion placing the output in buffer */ @@ -547,10 +554,10 @@ static void xbuf_format_converter(smart_str *xbuf, const char *fmt, va_list ap) case 'v': s = va_arg(ap, char *); if (s != NULL) { - if (adjust_precision && precision) { - s_len = precision; - } else { + if (!adjust_precision) { s_len = strlen(s); + } else { + s_len = strnlen(s, precision); } } else { s = S_NULL; |