zig/lib/libc/mingw/stdio/mingw_printf.c
Andrew Kelley 9df0177f33 mingw: add the mingw stdio functions back
We would rather use the ucrt for these, but sometimes dependencies on
the mingw stdio functions creep in. 仕方ない.

The cost is only paid if they are used; otherwise the symbols are
garbage-collected at link time.
2024-01-08 11:52:38 -07:00

59 lines
2.4 KiB
C
Vendored

/* printf.c
*
* $Id: printf.c,v 1.1 2008/08/11 22:41:55 keithmarshall Exp $
*
* Provides an implementation of the "printf" function, conforming
* generally to C99 and SUSv3/POSIX specifications, with extensions
* to support Microsoft's non-standard format specifications. This
* is included in libmingwex.a, whence it may replace the Microsoft
* function of the same name.
*
* Written by Keith Marshall <keithmarshall@users.sourceforge.net>
*
* This implementation of "printf" will normally be invoked by calling
* "__mingw_printf()" in preference to a direct reference to "printf()"
* itself; this leaves the MSVCRT implementation as the default, which
* will be deployed when user code invokes "print()". Users who then
* wish to use this implementation may either call "__mingw_printf()"
* directly, or may use conditional preprocessor defines, to redirect
* references to "printf()" to "__mingw_printf()".
*
* Compiling this module with "-D INSTALL_AS_DEFAULT" will change this
* recommended convention, such that references to "printf()" in user
* code will ALWAYS be redirected to "__mingw_printf()"; if this option
* is adopted, then users wishing to use the MSVCRT implementation of
* "printf()" will be forced to use a "back-door" mechanism to do so.
* Such a "back-door" mechanism is provided with MinGW, allowing the
* MSVCRT implementation to be called as "__msvcrt_printf()"; however,
* since users may not expect this behaviour, a standard libmingwex.a
* installation does not employ this option.
*
*
* This is free software. You may redistribute and/or modify it as you
* see fit, without restriction of copyright.
*
* This software is provided "as is", in the hope that it may be useful,
* but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
* MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
* time will the author accept any form of liability for any damages,
* however caused, resulting from the use of this software.
*
*/
#include <stdio.h>
#include <stdarg.h>
#include "mingw_pformat.h"
int __cdecl __printf(const APICHAR *, ...) __MINGW_NOTHROW;
int __cdecl __printf(const APICHAR *fmt, ...)
{
register int retval;
va_list argv; va_start( argv, fmt );
_lock_file( stdout );
retval = __pformat( PFORMAT_TO_FILE | PFORMAT_NOLIMIT, stdout, 0, fmt, argv );
_unlock_file( stdout );
va_end( argv );
return retval;
}