- va_start(args, format);
- len = vsnprintf(buffer, sizeof(buffer), format, args);
- va_end(args);
- len = min(len, sizeof(buffer) - 1);
+ do {
+ buffer = calloc(1, cur);
+
+ va_start(args, format);
+ len = vsnprintf(buffer, cur, format, args);
+ va_end(args);
+
+ if (len <= cur)
+ break;
+
+ cur = len;
+ free(buffer);
+ } while (1);
+