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