453 |
been written. */ |
been written. */ |
454 |
|
|
455 |
int avail, needed; |
int avail, needed; |
456 |
|
va_list a1; |
457 |
|
|
458 |
|
va_copy(a1, args); |
459 |
avail = st->capacity - st->length + 1; |
avail = st->capacity - st->length + 1; |
460 |
needed = vsnprintf (st->string + st->length, avail, format, args); |
needed = vsnprintf (st->string + st->length, avail, format, args); |
461 |
|
|
464 |
{ |
{ |
465 |
ds_extend (st, st->length + needed); |
ds_extend (st, st->length + needed); |
466 |
|
|
467 |
vsprintf (st->string + st->length, format, args); |
vsprintf (st->string + st->length, format, a1); |
468 |
} |
} |
469 |
else |
else |
470 |
while (needed == -1) |
while (needed == -1) |
471 |
{ |
{ |
472 |
|
va_list a2; |
473 |
|
va_copy(a2, a1); |
474 |
|
|
475 |
ds_extend (st, (st->capacity + 1) * 2); |
ds_extend (st, (st->capacity + 1) * 2); |
476 |
avail = st->capacity - st->length + 1; |
avail = st->capacity - st->length + 1; |
477 |
|
|
478 |
needed = vsnprintf (st->string + st->length, avail, format, args); |
needed = vsnprintf (st->string + st->length, avail, format, a2); |
479 |
|
va_end(a2); |
480 |
|
|
481 |
} |
} |
482 |
|
va_end(a1); |
483 |
|
|
484 |
st->length += needed; |
st->length += needed; |
485 |
} |
} |