[CMAKE]
[reactos.git] / lib / sdk / crt / conio / cprintf.c
1 /*
2 * COPYRIGHT: Winehq
3 * PROJECT: wine
4 * FILE: msvcrt/conio/cprintf.c
5 * PURPOSE: C Runtime
6 * PROGRAMMER: Magnus Olsen (Imported from wine cvs 2006-05-23)
7 */
8 #ifndef USE_NEW_SPRINTF
9
10 #include <precomp.h>
11
12 /*
13 * @implemented
14 */
15 int
16 _cprintf(const char *fmt, ...)
17 {
18 char buf[2048], *mem = buf;
19 int written, resize = sizeof(buf), retval;
20 va_list valist;
21
22 va_start( valist, fmt );
23
24 while ((written = _vsnprintf( mem, resize, fmt, valist )) == -1 ||
25 written > resize)
26 {
27 resize = (written == -1 ? resize * 2 : written + 1);
28 if (mem != buf)
29 free (mem);
30 if (!(mem = (char *)malloc(resize)))
31 return EOF;
32
33 va_end ( valist );
34 va_start( valist, fmt );
35 }
36 va_end ( valist );
37 retval = _cputs( mem );
38 if (mem != buf)
39 free (mem);
40 return retval;
41 }
42
43 #endif