From 202b56b1c003d16d7a68efcbff3e372ac7db8d5f Mon Sep 17 00:00:00 2001
From: Peter Verthez <Peter.Verthez@advalvas.be>
Date: Sat, 28 Sep 2002 17:54:41 +0000
Subject: [PATCH] Portability: have fallback solution if vsnprintf is not
 available.

---
 gedcom/message.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/gedcom/message.c b/gedcom/message.c
index 213e049..5f0bdc3 100644
--- a/gedcom/message.c
+++ b/gedcom/message.c
@@ -24,7 +24,13 @@
 #include "gedcom_internal.h"
 #include "gedcom.h"
 
+#if HAVE_VSNPRINTF
 #define INITIAL_BUF_SIZE 256
+#else
+/* Risk on overflowing buffer, so make size big */
+#define INITIAL_BUF_SIZE 65536
+#endif
+
 char *mess_buffer = NULL;
 size_t bufsize;
 
@@ -76,6 +82,7 @@ int safe_buf_vappend(const char *s, va_list ap)
       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) {
@@ -85,6 +92,15 @@ int safe_buf_vappend(const char *s, va_list ap)
 	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);
+      break;
+#  else /* not HAVE_VPRINTF */
+#     error "Your standard library has neither vsnprintf nor vsprintf defined. One of them is required!"
+#  endif
+#endif
     }
   }
   return res;
-- 
2.30.2