]> granicus.if.org Git - php/commitdiff
Syn spprintf fix with that of 5.3 and above
authorIlia Alshanetsky <iliaa@php.net>
Wed, 4 Feb 2009 15:03:12 +0000 (15:03 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 4 Feb 2009 15:03:12 +0000 (15:03 +0000)
configure.in
main/spprintf.c

index fd8ae4832015ac943356d3627289d104b85ffd9d..419b3f973609b9cdcf084b68daff40639d36d9cc 100644 (file)
@@ -579,6 +579,7 @@ strcoll \
 strdup \
 strerror \
 strftime \
+strnlen \
 strptime \
 strstr \
 strtok_r \
index aeecc6ca705783e9b4ed66e33249317a77649d24..b21e1fe14428d5ff912add9952e6b5a92dc065dc 100644 (file)
 
 /* }}} */
 
+#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;