- len = strlen(mess_buffer);
- while (1) {
- char *buf_ptr = mess_buffer + len;
- int rest_size = bufsize - len;
-
- res = vsnprintf(buf_ptr, rest_size, s, ap);
-
- if (res > -1 && res < rest_size) {
+ if (mess_buffer) {
+ len = strlen(mess_buffer);
+ while (1) {
+ char *buf_ptr = mess_buffer + len;
+ int rest_size = bufsize - len;
+
+#if HAVE_VSNPRINTF
+ res = vsnprintf(buf_ptr, rest_size, s, ap);
+
+ if (res > -1 && res < rest_size) {
+ break;
+ }
+ else {
+ bufsize *= 2;
+ mess_buffer = realloc(mess_buffer, bufsize);
+ }
+#else /* not HAVE_VSNPRINTF */
+# if HAVE_VSPRINTF
+# warning "Using VSPRINTF. Buffer overflow could happen!"
+ vsprintf(buf_ptr, s, ap);