]> granicus.if.org Git - php/commitdiff
Using zend_spprintf should be faster here
authorMarcus Boerger <helly@php.net>
Sun, 31 Aug 2003 10:06:13 +0000 (10:06 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 31 Aug 2003 10:06:13 +0000 (10:06 +0000)
Zend/zend_reflection_api.c
ext/reflection/php_reflection.c

index 4df1f9d438efde5685ced328892d9d356090ea17..21c8bf95f7a8b0f2f9b0a61aa66b13dd6d47bc60 100644 (file)
@@ -80,17 +80,18 @@ string *string_printf(string *str, const char *format, ...)
 {
        int n;
        va_list arg;
-       va_start(arg, format); 
-       n = vsnprintf(str->string + str->len - 1, str->alloced - str->len, format, arg);
-       if (n > str->alloced - str->len) {
-               while (n + str->len > str->alloced ) {
-                       str->alloced *= 2;
-               }
-               str->string = erealloc(str->string, str->alloced + 1);
-               n = vsnprintf(str->string + str->len - 1, str->alloced - str->len, format, arg);
+       char *s_tmp;
+
+       va_start(arg, format);
+       n = zend_vspprintf(&s_tmp, 0, format, arg);
+       if (n) {
+               str->alloced += n;
+               str->string = erealloc(str->string, str->alloced);
+               memcpy(str->string + str->len - 1, s_tmp, n);
+               str->len += n;
        }
+       efree(s_tmp);
        va_end(arg);
-       str->len += n;
        return str;
 }
 
index 4df1f9d438efde5685ced328892d9d356090ea17..21c8bf95f7a8b0f2f9b0a61aa66b13dd6d47bc60 100644 (file)
@@ -80,17 +80,18 @@ string *string_printf(string *str, const char *format, ...)
 {
        int n;
        va_list arg;
-       va_start(arg, format); 
-       n = vsnprintf(str->string + str->len - 1, str->alloced - str->len, format, arg);
-       if (n > str->alloced - str->len) {
-               while (n + str->len > str->alloced ) {
-                       str->alloced *= 2;
-               }
-               str->string = erealloc(str->string, str->alloced + 1);
-               n = vsnprintf(str->string + str->len - 1, str->alloced - str->len, format, arg);
+       char *s_tmp;
+
+       va_start(arg, format);
+       n = zend_vspprintf(&s_tmp, 0, format, arg);
+       if (n) {
+               str->alloced += n;
+               str->string = erealloc(str->string, str->alloced);
+               memcpy(str->string + str->len - 1, s_tmp, n);
+               str->len += n;
        }
+       efree(s_tmp);
        va_end(arg);
-       str->len += n;
        return str;
 }