{
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;
}
{
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;
}