[FREELDR]
[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
9 #include <precomp.h>
10
11 /*
12 * @implemented
13 */
14 int
15 _cprintf(const char *fmt, ...)
16 {
17 char buf[2048], *mem = buf;
18 int written, resize = sizeof(buf), retval;
19 va_list valist;
20
21 va_start( valist, fmt );
22
23 while ((written = _vsnprintf( mem, resize, fmt, valist )) == -1 ||
24 written > resize)
25 {
26 resize = (written == -1 ? resize * 2 : written + 1);
27 if (mem != buf)
28 free (mem);
29 if (!(mem = (char *)malloc(resize)))
30 return EOF;
31
32 va_end ( valist );
33 va_start( valist, fmt );
34 }
35 va_end ( valist );
36 retval = _cputs( mem );
37 if (mem != buf)
38 free (mem);
39 return retval;
40 }