- static char *buf;
- static int bufsz;
- int i, ret, newsz;
- char *tmp;
-
- while((ret = vsnprintf(buf, bufsz, fmt, ap)) > bufsz || ret < 0) {
- if(ret > bufsz) {
- newsz = ret + 1;
- } else {
- newsz = bufsz ? bufsz * 2 : 256;
- }
- if(!(tmp = realloc(buf, newsz))) {
- if(buf) {
- buf[bufsz - 1] = 0;
- }
- break;
- }
- buf = tmp;
- bufsz = newsz;
- }