From 88e8106ac903dcc90c1e84982051a967c2172437 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Fri, 16 Jul 2004 16:53:49 +0000
Subject: [PATCH] Modified cprintf() on *nix, malloc() a "big enough" buffer to
 hold the temporary result... on Win32, use a static 16k buffer and pray.

---
 src/conio/conio.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/conio/conio.c b/src/conio/conio.c
index 0ecb89f73a..59ac46eaed 100644
--- a/src/conio/conio.c
+++ b/src/conio/conio.c
@@ -461,19 +461,34 @@ void insline(void)
 int cprintf(char *fmat, ...)
 {
     va_list argptr;
-	char	str[4097];
 	int		pos;
 	int		ret;
+#ifdef _WIN32			/* Can't figure out a way to allocate a "big enough" buffer for Win32. */
+	char	str[16384];
+#else
+	char	*str;
+#endif
 
 	if(!initialized)
 		initciowrap(3);
     va_start(argptr,fmat);
-    ret=vsprintf(str,fmat,argptr);
+#ifdef WIN32
+	ret=vnsprintf(str,sizeof(str)-1,fmat,argptr);
+#else
+    ret=vsnprintf(NULL,0,fmat,argptr);
+	str=(char *)malloc(ret+1);
+	if(str==NULL)
+		return(EOF);
+	ret=vsprintf(str,fmat,argptr);
+#endif
     va_end(argptr);
 	if(ret>=0)
 		cputs(str);
 	else
 		ret=EOF;
+#ifndef WIN32
+	free(str);
+#endif
     return(ret);
 }
 
-- 
GitLab