4 * Definitions of types and prototypes of functions for operations on
5 * standard input and standard output streams.
9 * Written by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
10 * Copyright (C) 1997-2005, 2007-2010, 2014-2018, MinGW.org Project.
13 * Permission is hereby granted, free of charge, to any person obtaining a
14 * copy of this software and associated documentation files (the "Software"),
15 * to deal in the Software without restriction, including without limitation
16 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 * and/or sell copies of the Software, and to permit persons to whom the
18 * Software is furnished to do so, subject to the following conditions:
20 * The above copyright notice, this permission notice, and the following
21 * disclaimer shall be included in all copies or substantial portions of
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
30 * DEALINGS IN THE SOFTWARE.
32 * NOTE: The file manipulation functions provided by Microsoft seem to
33 * work with either slash (/) or backslash (\) as the directory separator;
34 * (this is consistent with Microsoft's own documentation, on MSDN).
38 #pragma GCC system_header
40 /* When including <wchar.h>, some of the definitions and declarations
41 * which are nominally provided in <stdio.h> must be duplicated. Rather
42 * than require duplicated maintenance effort, we provide for partial
43 * inclusion of <stdio.h> by <wchar.h>; only when not included in
44 * this partial fashion...
46 #ifndef __WCHAR_H_SOURCED__
48 * ...which is exclusive to <wchar.h>, do we assert the multiple
49 * inclusion guard for <stdio.h> itself.
54 /* All the headers include this file.
59 /* POSIX stipulates that the following set of types, (as identified by
60 * __need_TYPENAME macros), shall be defined consistently with <stddef.h>;
61 * by defining the appropriate __need_TYPENAME macros, we may selectively
62 * obtain the required definitions by inclusion of <stddef.h>, WITHOUT
63 * automatic exposure of any of its additional content.
67 #define __need_wchar_t
71 #if _POSIX_C_SOURCE >= 200809L
72 /* Similarly, for types defined in <sys/types.h>, (which are explicitly
73 * dependent on the POSIX.1-2008 feature test)...
76 # define __need_ssize_t
78 #if !(defined __STRICT_ANSI__ || defined (__NO_MINGW_LFS)) \
79 && defined (__MSVCRT__)
80 /* ...while this is required to support our fseeko64() and ftello64()
81 * implementations, (neither of which is in any way standardized)...
83 # define __need___off64_t
85 /* It is sufficient to test for just one define from each of the two
88 #if defined __need_off_t || defined __need___off64_t
89 /* ...to identify a requirement for selective inclusion of one or more
90 * of these type definitions from "sys/types.h"; (note that we use the
91 * #include "..." form here, to ensure that we get the correct header
92 * file, relative to the location of this <stdio.h>).
94 # include "sys/types.h"
98 /* Also similarly, for the va_list type, defined in "stdarg.h"
100 # if defined __GNUC__ && __GNUC__ >= 3
101 # define __need___va_list
103 # define __VALIST __builtin_va_list
105 # define __VALIST char *
108 #endif /* ! RC_INVOKED */
111 /* Flags for the iobuf structure
113 #define _IOREAD 1 /* currently reading */
114 #define _IOWRT 2 /* currently writing */
115 #define _IORW 0x0080 /* opened as "r+w" */
117 /* The three standard file pointers provided by the run time library.
118 * NOTE: These will go to the bit-bucket silently in GUI applications!
120 #define STDIN_FILENO 0
121 #define STDOUT_FILENO 1
122 #define STDERR_FILENO 2
124 /* Returned by various functions on end of file condition or error.
128 #endif /* _STDIO_H */
130 /* The maximum length of a file name. It may be better to use the Windows'
131 * GetVolumeInformation() function in preference to this constant, but hey,
132 * this works! Note that <io.h> also defines it, but we don't guard it, so
133 * that the compiler has a chance to catch inconsistencies.
135 * FIXME: Right now, we define this unconditionally for both full <stdio.h>
136 * inclusion, and for partial inclusion on behalf of <wchar.h>, (which needs
137 * it for some non-ANSI structure declarations). The conditions under which
138 * <wchar.h> needs this require review, because defining it as a consequence
139 * of including <wchar.h> alone may violate strict ANSI conformity.
141 #define FILENAME_MAX (260)
144 /* The maximum number of files that may be open at once. I have set this to
145 * a conservative number. The actual value may be higher.
147 #define FOPEN_MAX (20)
149 /* After creating this many names, tmpnam and tmpfile return NULL
151 #define TMP_MAX 32767
153 /* Tmpnam, tmpfile and, sometimes, _tempnam try to create
154 * temp files in the root directory of the current drive
155 * (not in pwd, as suggested by some older MS doc's).
156 * Redefining these macros does not effect the CRT functions.
158 #define _P_tmpdir "\\"
159 #ifndef __STRICT_ANSI__
160 #define P_tmpdir _P_tmpdir
162 #define _wP_tmpdir L"\\"
164 /* The maximum size of name (including NUL) that will be put in the user
165 * supplied buffer caName for tmpnam.
166 * Inferred from the size of the static buffer returned by tmpnam
167 * when passed a NULL argument. May actually be smaller.
169 #define L_tmpnam (16)
171 #define _IOFBF 0x0000 /* full buffered */
172 #define _IOLBF 0x0040 /* line buffered */
173 #define _IONBF 0x0004 /* not buffered */
175 #define _IOMYBUF 0x0008 /* stdio malloc()'d buffer */
176 #define _IOEOF 0x0010 /* EOF reached on read */
177 #define _IOERR 0x0020 /* I/O error from system */
178 #define _IOSTRG 0x0040 /* Strange or no file descriptor */
180 # define _IOAPPEND 0x0200
183 /* The buffer size as used by setbuf such that it is equivalent to
184 * (void) setvbuf(fileSetBuffer, caBuffer, _IOFBF, BUFSIZ).
188 /* Constants for nOrigin indicating the position relative to which fseek
189 * sets the file position. Defined unconditionally since ISO and POSIX
190 * say they are defined here.
196 #endif /* _STDIO_H */
199 #if ! (defined _STDIO_H && defined _WCHAR_H)
200 /* The structure underlying the FILE type; this should be defined when
201 * including either <stdio.h> or <wchar.h>. If both header include guards
202 * are now in place, then we must currently be including <stdio.h> in its
203 * own right, having already processed this block during a prior partial
204 * inclusion by <wchar.h>; there is no need to process it a second time.
206 * Some believe that nobody in their right mind should make use of the
207 * internals of this structure. Provided by Pedro A. Aranda Gutiirrez
210 typedef struct _iobuf
222 #endif /* ! (_STDIO_H && _WCHAR_H) */
224 /* Content to be exposed only when including <stdio.h> in its own right;
225 * these will not be exposed when __WCHAR_H_SOURCE__ is defined, as will
226 * be the case when <stdio.h> is included indirectly, by <wchar.h>
229 * The standard file handles
231 #ifndef __DECLSPEC_SUPPORTED
233 extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */
235 #define _iob (*_imp___iob) /* An array of FILE */
237 #else /* __DECLSPEC_SUPPORTED */
239 __MINGW_IMPORT FILE _iob[]; /* An array of FILE imported from DLL. */
241 #endif /* __DECLSPEC_SUPPORTED */
243 #define stdin (&_iob[STDIN_FILENO])
244 #define stdout (&_iob[STDOUT_FILENO])
245 #define stderr (&_iob[STDERR_FILENO])
247 /* Need to close the current _STDIO_H specific block here...
250 /* ...because, we need this regardless of the inclusion mode...
255 /* ...then revert to _STDIO_H specific mode, to declare...
260 _CRTIMP __cdecl __MINGW_NOTHROW FILE * fopen (const char *, const char *);
261 _CRTIMP __cdecl __MINGW_NOTHROW FILE * freopen (const char *, const char *, FILE *);
262 _CRTIMP __cdecl __MINGW_NOTHROW int fflush (FILE *);
263 _CRTIMP __cdecl __MINGW_NOTHROW int fclose (FILE *);
265 /* Note: Microsoft also declares remove & rename (but not their wide char
266 * variants) in <io.h>; since duplicate prototypes are acceptable, provided
267 * they are consistent, we simply declare them here anyway, while allowing
268 * the compiler to check consistency as appropriate.
270 _CRTIMP __cdecl __MINGW_NOTHROW int remove (const char *);
271 _CRTIMP __cdecl __MINGW_NOTHROW int rename (const char *, const char *);
272 _CRTIMP __cdecl __MINGW_NOTHROW FILE * tmpfile (void);
273 _CRTIMP __cdecl __MINGW_NOTHROW char * tmpnam (char *);
275 #ifndef __STRICT_ANSI__
276 _CRTIMP __cdecl __MINGW_NOTHROW char *_tempnam (const char *, const char *);
277 _CRTIMP __cdecl __MINGW_NOTHROW int _rmtmp (void);
278 _CRTIMP __cdecl __MINGW_NOTHROW int _unlink (const char *);
280 #if __MSVCRT_VERSION__>=__MSVCR80_DLL
281 /* The following pair of non-ANSI functions require a non-free version of
282 * the Microsoft runtime; neither is provided by any MSVCRT.DLL variant.
284 _CRTIMP __cdecl __MINGW_NOTHROW void _lock_file(FILE *);
285 _CRTIMP __cdecl __MINGW_NOTHROW void _unlock_file(FILE *);
289 _CRTIMP __cdecl __MINGW_NOTHROW char * tempnam (const char *, const char *);
290 _CRTIMP __cdecl __MINGW_NOTHROW int rmtmp (void);
291 _CRTIMP __cdecl __MINGW_NOTHROW int unlink (const char *);
293 #endif /* __STRICT_ANSI__ */
295 _CRTIMP __cdecl __MINGW_NOTHROW int setvbuf (FILE *, char *, int, size_t);
296 _CRTIMP __cdecl __MINGW_NOTHROW void setbuf (FILE *, char *);
300 * MSVCRT implementations are not ANSI C99 conformant...
301 * we offer conforming alternatives from libmingwex.a
303 #undef __mingw_stdio_redirect__
304 #define __mingw_stdio_redirect__(F) __cdecl __MINGW_NOTHROW __Wformat(F)
305 #define __Wformat_mingw_printf(F,A) __attribute__((__format__(__mingw_printf__,F,A)))
308 /* From GCC-6 onwards, we will provide customized -Wformat
309 * handling, via our own mingw_printf format category...
311 #define __Wformat(F) __Wformat_##F __mingw_##F
313 #else /* __GNUC__ < 6 */
314 /* ...whereas, for earlier GCC, we preserve the status quo,
315 * offering no -Wformat checking for those functions which
316 * replace the MSVCRT.DLL versions...
318 #define __Wformat(F) __mingw_##F
320 * ...while degrading to gnu_printf checking for snprintf()
321 * and vsnprintf(), (which are ALWAYS MinGW.org variants).
323 #define __mingw_printf__ __gnu_printf__
326 /* The following convenience macros specify the appropriate
327 * -Wformat checking for MSVCRT.DLL replacement functions...
329 #define __Wformat_printf __Wformat_mingw_printf(1,2)
330 #define __Wformat_fprintf __Wformat_mingw_printf(2,3)
331 #define __Wformat_sprintf __Wformat_mingw_printf(2,3)
332 #define __Wformat_vprintf __Wformat_mingw_printf(1,0)
333 #define __Wformat_vfprintf __Wformat_mingw_printf(2,0)
334 #define __Wformat_vsprintf __Wformat_mingw_printf(2,0)
336 * ...while this pair are specific to the two MinGW.org
339 #define __Wformat_snprintf __Wformat_mingw_printf(3,4)
340 #define __Wformat_vsnprintf __Wformat_mingw_printf(3,0)
342 extern int __mingw_stdio_redirect__(fprintf)(FILE*, const char*, ...);
343 extern int __mingw_stdio_redirect__(printf)(const char*, ...);
344 extern int __mingw_stdio_redirect__(sprintf)(char*, const char*, ...);
345 extern int __mingw_stdio_redirect__(snprintf)(char*, size_t, const char*, ...);
346 extern int __mingw_stdio_redirect__(vfprintf)(FILE*, const char*, __VALIST);
347 extern int __mingw_stdio_redirect__(vprintf)(const char*, __VALIST);
348 extern int __mingw_stdio_redirect__(vsprintf)(char*, const char*, __VALIST);
349 extern int __mingw_stdio_redirect__(vsnprintf)(char*, size_t, const char*, __VALIST);
351 /* When using these C99 conforming alternatives, we may wish to support
352 * some of Microsoft's quirky formatting options, even when they violate
353 * strict C99 conformance.
355 #define _MSVC_PRINTF_QUIRKS 0x0100U
356 #define _QUERY_MSVC_PRINTF_QUIRKS ~0U, 0U
357 #define _DISABLE_MSVC_PRINTF_QUIRKS ~_MSVC_PRINTF_QUIRKS, 0U
358 #define _ENABLE_MSVC_PRINTF_QUIRKS ~0U, _MSVC_PRINTF_QUIRKS
360 /* Those quirks which conflict with ANSI C99 specified behaviour are
361 * disabled by default; use the following function, like this:
363 * _mingw_output_format_control( _ENABLE_MSVC_PRINTF_QUIRKS );
365 * to enable them, like this:
367 * state = _mingw_output_format_control( _QUERY_MSVC_PRINTF_QUIRKS )
368 * & _MSVC_PRINTF_QUIRKS;
370 * to ascertain the currently active enabled state, or like this:
372 * _mingw_output_format_control( _DISABLE_MSVC_PRINTF_QUIRKS );
374 * to disable them again.
376 extern unsigned int _mingw_output_format_control( unsigned int, unsigned int );
378 #if __USE_MINGW_ANSI_STDIO
379 /* User has expressed a preference for C99 conformance...
381 # undef __mingw_stdio_redirect__
383 /* For C++ we use inline implementations, to avoid interference
384 * with namespace qualification, which may result from using #defines.
386 # define __mingw_stdio_redirect__ inline __cdecl __MINGW_NOTHROW
388 # elif defined __GNUC__
389 /* FIXME: Is there any GCC version prerequisite here?
391 * We also prefer inline implementations for C, when we can be confident
392 * that the GNU specific __inline__ mechanism is supported.
394 # define __mingw_stdio_redirect__ static __inline__ __cdecl __MINGW_NOTHROW
397 /* Can't use inlines; fall back on module local static stubs.
399 # define __mingw_stdio_redirect__ static __cdecl __MINGW_NOTHROW
402 __mingw_stdio_redirect__
403 int fprintf (FILE *__stream, const char *__format, ...)
405 register int __retval;
406 __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
407 __retval = __mingw_vfprintf( __stream, __format, __local_argv );
408 __builtin_va_end( __local_argv );
412 __mingw_stdio_redirect__
413 int printf (const char *__format, ...)
415 register int __retval;
416 __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
417 __retval = __mingw_vprintf( __format, __local_argv );
418 __builtin_va_end( __local_argv );
422 __mingw_stdio_redirect__
423 int sprintf (char *__stream, const char *__format, ...)
425 register int __retval;
426 __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
427 __retval = __mingw_vsprintf( __stream, __format, __local_argv );
428 __builtin_va_end( __local_argv );
432 __mingw_stdio_redirect__
433 int vfprintf (FILE *__stream, const char *__format, __VALIST __local_argv)
435 return __mingw_vfprintf( __stream, __format, __local_argv );
438 __mingw_stdio_redirect__
439 int vprintf (const char *__format, __VALIST __local_argv)
441 return __mingw_vprintf( __format, __local_argv );
444 __mingw_stdio_redirect__
445 int vsprintf (char *__stream, const char *__format, __VALIST __local_argv)
447 return __mingw_vsprintf( __stream, __format, __local_argv );
450 #else /* !__USE_MINGW_ANSI_STDIO */
451 /* Default configuration: simply direct all calls to MSVCRT...
453 _CRTIMP __cdecl __MINGW_NOTHROW int fprintf (FILE *, const char *, ...);
454 _CRTIMP __cdecl __MINGW_NOTHROW int printf (const char *, ...);
455 _CRTIMP __cdecl __MINGW_NOTHROW int sprintf (char *, const char *, ...);
456 _CRTIMP __cdecl __MINGW_NOTHROW int vfprintf (FILE *, const char *, __VALIST);
457 _CRTIMP __cdecl __MINGW_NOTHROW int vprintf (const char *, __VALIST);
458 _CRTIMP __cdecl __MINGW_NOTHROW int vsprintf (char *, const char *, __VALIST);
461 /* Regardless of user preference, always offer these alternative
462 * entry points, for direct access to the MSVCRT implementations,
463 * with ms_printf -Wformat checking in each case.
466 #undef __mingw_stdio_redirect__
467 #define __mingw_stdio_redirect__(F) __cdecl __MINGW_NOTHROW __Wformat(F)
468 #define __Wformat_msvcrt_printf(F,A) __attribute__((__format__(__ms_printf__,F,A)))
469 #define __Wformat(F) __Wformat_ms_##F __msvcrt_##F
471 #define __Wformat_ms_printf __Wformat_msvcrt_printf(1,2)
472 #define __Wformat_ms_fprintf __Wformat_msvcrt_printf(2,3)
473 #define __Wformat_ms_sprintf __Wformat_msvcrt_printf(2,3)
474 #define __Wformat_ms_vprintf __Wformat_msvcrt_printf(1,0)
475 #define __Wformat_ms_vfprintf __Wformat_msvcrt_printf(2,0)
476 #define __Wformat_ms_vsprintf __Wformat_msvcrt_printf(2,0)
478 _CRTIMP int __mingw_stdio_redirect__(fprintf)(FILE *, const char *, ...);
479 _CRTIMP int __mingw_stdio_redirect__(printf)(const char *, ...);
480 _CRTIMP int __mingw_stdio_redirect__(sprintf)(char *, const char *, ...);
481 _CRTIMP int __mingw_stdio_redirect__(vfprintf)(FILE *, const char *, __VALIST);
482 _CRTIMP int __mingw_stdio_redirect__(vprintf)(const char *, __VALIST);
483 _CRTIMP int __mingw_stdio_redirect__(vsprintf)(char *, const char *, __VALIST);
485 #undef __mingw_stdio_redirect__
488 /* The following three ALWAYS refer to the MSVCRT implementations...
490 _CRTIMP __cdecl __MINGW_NOTHROW int _snprintf (char *, size_t, const char *, ...);
491 _CRTIMP __cdecl __MINGW_NOTHROW int _vsnprintf (char *, size_t, const char *, __VALIST);
492 _CRTIMP __cdecl __MINGW_NOTHROW int _vscprintf (const char *, __VALIST);
494 #ifdef _ISOC99_SOURCE
495 /* Microsoft does not provide implementations for the following,
496 * which are required by C99. Note in particular that Microsoft's
497 * corresponding implementations of _snprintf() and _vsnprintf() are
498 * NOT compatible with C99, but the following are; if you want the
499 * MSVCRT behaviour, you MUST use the Microsoft "uglified" names.
501 __cdecl __MINGW_NOTHROW __Wformat_snprintf
502 int snprintf (char *, size_t, const char *, ...);
504 __cdecl __MINGW_NOTHROW __Wformat_vsnprintf
505 int vsnprintf (char *, size_t, const char *, __VALIST);
507 __cdecl __MINGW_NOTHROW
508 int vscanf (const char * __restrict__, __VALIST);
510 __cdecl __MINGW_NOTHROW
511 int vfscanf (FILE * __restrict__, const char * __restrict__, __VALIST);
513 __cdecl __MINGW_NOTHROW
514 int vsscanf (const char * __restrict__, const char * __restrict__, __VALIST);
516 #endif /* _ISOC99_SOURCE */
517 #endif /* <stdio.h> included in its own right */
519 #if __MSVCRT_VERSION__ >= __MSVCR80_DLL || _WIN32_WINNT >= _WIN32_WINNT_VISTA
521 * In MSVCR80.DLL, (and its descendants), Microsoft introduced variants
522 * of the printf() functions, with names qualified by an underscore prefix
523 * and "_p" or "_p_l" suffixes; implemented in Microsoft's typically crass,
524 * non-standard, and non-portable fashion, these provide support for access
525 * to printf() arguments in random order, as was standardised by POSIX as a
526 * feature of the optional Extended Systems Interface (XSI) specification,
527 * and is now required for conformity with the POSIX.1-2008 base standard.
528 * Although these additional Microsoft functions were subsequently added
529 * to MSVCRT.DLL, from Windows-Vista onward, and they are prototyped here,
530 * MinGW applications are strenuously encouraged to avoid using them; a
531 * much better alternative is to "#define _XOPEN_SOURCE 700" before any
532 * system header is included, then use POSIX standard printf() functions
533 * instead; this is both portable to many non-Windows platforms, and it
534 * offers better compatibility with earlier Windows versions.
536 #ifndef __have_typedef_locale_t
537 /* Note that some of the following require the opaque locale_t data type,
538 * which we may obtain, by selective inclusion, from <locale.h>
540 #define __need_locale_t
545 /* The following are to be declared only when <stdio.h> is explicitly
546 * included; the first six are NOT dependent on locale_t...
548 _CRTIMP __cdecl __MINGW_NOTHROW
549 int _printf_p (const char *, ...);
551 _CRTIMP __cdecl __MINGW_NOTHROW
552 int _fprintf_p (FILE *, const char *, ...);
554 _CRTIMP __cdecl __MINGW_NOTHROW
555 int _sprintf_p (char *, size_t, const char *, ...);
557 _CRTIMP __cdecl __MINGW_NOTHROW
558 int _vprintf_p (const char *, __VALIST);
560 _CRTIMP __cdecl __MINGW_NOTHROW
561 int _vfprintf_p (FILE *, const char *, __VALIST);
563 _CRTIMP __cdecl __MINGW_NOTHROW
564 int _vsprintf_p (char *, size_t, const char *, __VALIST);
566 /* ...whereas the following six DO depend on locale_t.
568 * CAVEAT: unless you are linking with non-free MSVCR80.DLL, or one
569 * of its later derivatives, good luck trying to use these; see the
570 * explanation in <locale.t>, as to why you may be unable to create,
571 * or otherwise acquire a reference to, a locale_t object.
573 _CRTIMP __cdecl __MINGW_NOTHROW
574 int _printf_p_l (const char *, locale_t, ...);
576 _CRTIMP __cdecl __MINGW_NOTHROW
577 int _fprintf_p_l (FILE *, const char *, locale_t, ...);
579 _CRTIMP __cdecl __MINGW_NOTHROW
580 int _sprintf_p_l (char *, size_t, const char *, locale_t, ...);
582 _CRTIMP __cdecl __MINGW_NOTHROW
583 int _vprintf_p_l (const char *, locale_t, __VALIST);
585 _CRTIMP __cdecl __MINGW_NOTHROW
586 int _vfprintf_p_l (FILE *, const char *, locale_t, __VALIST);
588 _CRTIMP __cdecl __MINGW_NOTHROW
589 int _vsprintf_p_l (char *, size_t, const char *, locale_t, __VALIST);
591 #endif /* <stdio.h> included in its own right */
592 #endif /* MSVCR80.DLL and descendants, or MSVCRT.DLL since Vista */
594 #if ! (defined _STDIO_H && defined _WCHAR_H)
595 #if __MSVCRT_VERSION__ >= __MSVCR80_DLL || _WIN32_WINNT >= _WIN32_WINNT_VISTA
597 * Wide character variants of the foregoing "positional parameter" printf()
598 * functions; MSDN says that these should be declared when either <stdio.h>, or
599 * <wchar.h> is included, so we make them selectively available to <wchar.h>,
600 * but, just as in the foregoing, we advise against their use.
602 _CRTIMP __cdecl __MINGW_NOTHROW
603 int _wprintf_p (const wchar_t *, ...);
605 _CRTIMP __cdecl __MINGW_NOTHROW
606 int _fwprintf_p (FILE *, const wchar_t *, ...);
608 _CRTIMP __cdecl __MINGW_NOTHROW
609 int _swprintf_p (wchar_t *, size_t, const wchar_t *, ...);
611 _CRTIMP __cdecl __MINGW_NOTHROW
612 int _vwprintf_p (const wchar_t *, __VALIST);
614 _CRTIMP __cdecl __MINGW_NOTHROW
615 int _vfwprintf_p (FILE *, const wchar_t *, __VALIST);
617 _CRTIMP __cdecl __MINGW_NOTHROW
618 int _vswprintf_p (wchar_t *, size_t, const wchar_t *, __VALIST);
620 _CRTIMP __cdecl __MINGW_NOTHROW
621 int _wprintf_p_l (const wchar_t *, locale_t, ...);
623 _CRTIMP __cdecl __MINGW_NOTHROW
624 int _fwprintf_p_l (FILE *, const wchar_t *, locale_t, ...);
626 _CRTIMP __cdecl __MINGW_NOTHROW
627 int _swprintf_p_l (wchar_t *, size_t, const wchar_t *, locale_t, ...);
629 _CRTIMP __cdecl __MINGW_NOTHROW
630 int _vwprintf_p_l (const wchar_t *, locale_t, __VALIST);
632 _CRTIMP __cdecl __MINGW_NOTHROW
633 int _vfwprintf_p_l (FILE *, const wchar_t *, locale_t, __VALIST);
635 _CRTIMP __cdecl __MINGW_NOTHROW
636 int _vswprintf_p_l (wchar_t *, size_t, const wchar_t *, locale_t, __VALIST);
638 #endif /* MSVCR80.DLL and descendants, or MSVCRT.DLL since Vista */
639 #endif /* ! (defined _STDIO_H && defined _WCHAR_H) */
641 /* Once again, back to <stdio.h> specific declarations.
643 #if _POSIX_C_SOURCE >= 200809L
644 /* POSIX standard IEEE 1003.1-2008 added getdelim() and getline()
646 __cdecl __MINGW_NOTHROW ssize_t
647 getdelim (char ** __restrict__, size_t * __restrict__, int, FILE * __restrict__);
649 __cdecl __MINGW_NOTHROW ssize_t
650 getline (char ** __restrict__, size_t * __restrict__, FILE * __restrict__);
652 #ifndef __NO_INLINE__
653 /* getline() is a trivial specialization of getdelim(), which may
654 * be readily expressed by inline expansion.
656 __CRT_ALIAS __LIBIMPL__(( FUNCTION = getline ))
657 __cdecl __MINGW_NOTHROW ssize_t getline
658 ( char **__restrict__ __l, size_t *__restrict__ __n, FILE *__restrict__ __s )
659 { return getdelim( __l, __n, '\n', __s ); }
661 #endif /* !__NO_INLINE__ */
662 #endif /* POSIX.1-2008 */
666 _CRTIMP __cdecl __MINGW_NOTHROW int fscanf (FILE *, const char *, ...);
667 _CRTIMP __cdecl __MINGW_NOTHROW int scanf (const char *, ...);
668 _CRTIMP __cdecl __MINGW_NOTHROW int sscanf (const char *, const char *, ...);
670 /* Character Input and Output Functions
672 _CRTIMP __cdecl __MINGW_NOTHROW int fgetc (FILE *);
673 _CRTIMP __cdecl __MINGW_NOTHROW char * fgets (char *, int, FILE *);
674 _CRTIMP __cdecl __MINGW_NOTHROW int fputc (int, FILE *);
675 _CRTIMP __cdecl __MINGW_NOTHROW int fputs (const char *, FILE *);
676 _CRTIMP __cdecl __MINGW_NOTHROW char * gets (char *);
677 _CRTIMP __cdecl __MINGW_NOTHROW int puts (const char *);
678 _CRTIMP __cdecl __MINGW_NOTHROW int ungetc (int, FILE *);
680 /* Traditionally, getc and putc are defined as macros. but the
681 * standard doesn't say that they must be macros. We use inline
682 * functions here to allow the fast versions to be used in C++
683 * with namespace qualification, eg., ::getc.
685 * NOTE: _filbuf and _flsbuf are not thread-safe.
687 _CRTIMP __cdecl __MINGW_NOTHROW int _filbuf (FILE *);
688 _CRTIMP __cdecl __MINGW_NOTHROW int _flsbuf (int, FILE *);
692 __CRT_INLINE __cdecl __MINGW_NOTHROW int getc (FILE *);
693 __CRT_INLINE __cdecl __MINGW_NOTHROW int getc (FILE * __F)
695 return (--__F->_cnt >= 0)
696 ? (int) (unsigned char) *__F->_ptr++
700 __CRT_INLINE __cdecl __MINGW_NOTHROW int putc (int, FILE *);
701 __CRT_INLINE __cdecl __MINGW_NOTHROW int putc (int __c, FILE * __F)
703 return (--__F->_cnt >= 0)
704 ? (int) (unsigned char) (*__F->_ptr++ = (char)__c)
705 : _flsbuf (__c, __F);
708 __CRT_INLINE __cdecl __MINGW_NOTHROW int getchar (void);
709 __CRT_INLINE __cdecl __MINGW_NOTHROW int getchar (void)
711 return (--stdin->_cnt >= 0)
712 ? (int) (unsigned char) *stdin->_ptr++
716 __CRT_INLINE __cdecl __MINGW_NOTHROW int putchar(int);
717 __CRT_INLINE __cdecl __MINGW_NOTHROW int putchar(int __c)
719 return (--stdout->_cnt >= 0)
720 ? (int) (unsigned char) (*stdout->_ptr++ = (char)__c)
721 : _flsbuf (__c, stdout);}
723 #else /* Use library functions. */
725 _CRTIMP __cdecl __MINGW_NOTHROW int getc (FILE *);
726 _CRTIMP __cdecl __MINGW_NOTHROW int putc (int, FILE *);
727 _CRTIMP __cdecl __MINGW_NOTHROW int getchar (void);
728 _CRTIMP __cdecl __MINGW_NOTHROW int putchar (int);
732 /* Direct Input and Output Functions
734 _CRTIMP __cdecl __MINGW_NOTHROW size_t fread (void *, size_t, size_t, FILE *);
735 _CRTIMP __cdecl __MINGW_NOTHROW size_t fwrite (const void *, size_t, size_t, FILE *);
737 /* File Positioning Functions
739 _CRTIMP __cdecl __MINGW_NOTHROW int fseek (FILE *, long, int);
740 _CRTIMP __cdecl __MINGW_NOTHROW long ftell (FILE *);
741 _CRTIMP __cdecl __MINGW_NOTHROW void rewind (FILE *);
743 #ifdef __USE_MINGW_FSEEK
744 /* Workaround for a limitation on Win9x where a file is not zero padded
745 * on write, following a seek beyond the original end of file; supporting
746 * redirector functions are implemented in libmingwex.a
748 * Note: this is improper usage. __USE_MINGW_FSEEK exhibits the form of a
749 * private (system reserved) feature test macro; as such, users should not
750 * define it directly, and thus, it really should not have been defined at
751 * this point; discourage this practice.
753 #warning "The __USE_MINGW_FSEEK feature test is deprecated"
754 #pragma info "Define _WIN32_WINDOWS, instead of __USE_MINGW_FSEEK"
756 #elif _WIN32_WINDOWS >= _WIN32_WINDOWS_95 && _WIN32_WINDOWS < _WIN32_WINNT_WIN2K
757 /* This is correct usage; the private __USE_MINGW_FSEEK feature affects only
758 * Win9x, so enable it implicitly when the _WIN32_WINDOWS feature is specified,
759 * thus indicating the user's intent to target a Win9x platform.
761 #define __USE_MINGW_FSEEK
764 #ifdef __USE_MINGW_FSEEK
765 /* Regardless of how it may have become defined, when __USE_MINGW_FSEEK has
766 * been defined, we must redirect calls to fseek() and fwrite(), so that the
767 * Win9x zero padding limitation can be mitigated.
769 __cdecl __MINGW_NOTHROW int __mingw_fseek (FILE *, __off64_t, int);
770 __CRT_ALIAS int fseek( FILE *__fp, long __offset, int __whence )
771 { return __mingw_fseek( __fp, (__off64_t)(__offset), __whence ); }
773 __cdecl __MINGW_NOTHROW size_t __mingw_fwrite (const void *, size_t, size_t, FILE *);
774 __CRT_ALIAS size_t fwrite( const void *__buf, size_t __len, size_t __cnt, FILE *__fp )
775 { return __mingw_fwrite( __buf, __len, __cnt, __fp ); }
776 #endif /* __USE_MINGW_FSEEK */
778 /* An opaque data type used for storing file positions... The contents
779 * of this type are unknown, but we (the compiler) need to know the size
780 * because the programmer using fgetpos and fsetpos will be setting aside
781 * storage for fpos_t aggregates. Actually I tested using a byte array and
782 * it is fairly evident that fpos_t is a 32-bit type in CRTDLL.DLL, but in
783 * MSVCRT.DLL, it is a 64-bit type. Define it in terms of an int type of
784 * the appropriate size, encapsulated within an aggregate type, to make
785 * it opaque to casting, and so discourage abuse.
788 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
790 typedef union { __int32 __value; __off32_t __offset; } fpos_t;
793 _CRTIMP __cdecl __MINGW_NOTHROW int fgetpos (FILE *, fpos_t *);
794 _CRTIMP __cdecl __MINGW_NOTHROW int fsetpos (FILE *, const fpos_t *);
796 #if _WIN32_WINNT >= _WIN32_WINNT_VISTA || __MSVCRT_VERSION__ >= __MSVCR80_DLL
798 * Microsoft introduced a number of variations on fseek() and ftell(),
799 * beginning with MSVCR80.DLL; the bare _fseeki64() and _ftelli64() were
800 * subsequently integrated into MSVCRT.DLL, from Vista onward...
802 _CRTIMP __cdecl __MINGW_NOTHROW int _fseeki64 (FILE *, __int64, int);
803 _CRTIMP __cdecl __MINGW_NOTHROW __int64 _ftelli64 (FILE *);
805 #if __MSVCRT_VERSION__ >= __MSVCR80_DLL
807 * ...while the "nolock" variants remain exclusive to MSVCR80.DLL, and
808 * its later MSVC specific derivatives.
810 _CRTIMP __cdecl __MINGW_NOTHROW int _fseek_nolock (FILE *, long, int);
811 _CRTIMP __cdecl __MINGW_NOTHROW long _ftell_nolock (FILE *);
813 _CRTIMP __cdecl __MINGW_NOTHROW int _fseeki64_nolock (FILE *, __int64, int);
814 _CRTIMP __cdecl __MINGW_NOTHROW __int64 _ftelli64_nolock (FILE *);
816 #endif /* MSVCR80.DLL and later derivatives ONLY */
818 #else /* pre-MSVCR80.DLL or MSVCRT.DLL pre-Vista */
820 * The Microsoft DLLs don't provide either _fseeki64() or _ftelli64(), but
821 * they DO provide fgetpos(), fsetpos(), and _lseeki64(), which may be used
822 * to emulate the two missing functions. (Note that we choose to provide
823 * these emulations in the form of MinGW external helper functions, rather
824 * than pollute the <stdio.h> namespace with declarations, such as that
825 * for _lseeki64(), which properly belongs in <io.h>).
827 #ifndef __USE_MINGW_FSEEK
828 /* If this option has been selected, an alternative emulation for _fseeki64()
829 * is provided later, to ensure that the call is wrapped in a MinGW specific
830 * fseek() handling API.
832 int __cdecl __MINGW_NOTHROW __mingw_fseeki64 (FILE *, __int64, int);
833 __CRT_ALIAS int __cdecl __MINGW_NOTHROW _fseeki64 (FILE *__f, __int64 __o, int __w)
834 { return __mingw_fseeki64 (__f, __o, __w); }
837 __int64 __cdecl __MINGW_NOTHROW __mingw_ftelli64 (FILE *);
838 __CRT_ALIAS __int64 __cdecl __MINGW_NOTHROW _ftelli64 (FILE *__file )
839 { return __mingw_ftelli64 (__file); }
841 #endif /* pre-MSVCR80.DLL or MSVCRT.DLL pre-Vista */
845 _CRTIMP __cdecl __MINGW_NOTHROW int feof (FILE *);
846 _CRTIMP __cdecl __MINGW_NOTHROW int ferror (FILE *);
849 inline __cdecl __MINGW_NOTHROW int feof (FILE * __F){ return __F->_flag & _IOEOF; }
850 inline __cdecl __MINGW_NOTHROW int ferror (FILE * __F){ return __F->_flag & _IOERR; }
852 #define feof(__F) ((__F)->_flag & _IOEOF)
853 #define ferror(__F) ((__F)->_flag & _IOERR)
856 _CRTIMP __cdecl __MINGW_NOTHROW void clearerr (FILE *);
857 _CRTIMP __cdecl __MINGW_NOTHROW void perror (const char *);
859 #ifndef __STRICT_ANSI__
863 _CRTIMP __cdecl __MINGW_NOTHROW FILE * _popen (const char *, const char *);
864 _CRTIMP __cdecl __MINGW_NOTHROW int _pclose (FILE *);
867 _CRTIMP __cdecl __MINGW_NOTHROW FILE * popen (const char *, const char *);
868 _CRTIMP __cdecl __MINGW_NOTHROW int pclose (FILE *);
871 /* Other Non ANSI functions
873 _CRTIMP __cdecl __MINGW_NOTHROW int _flushall (void);
874 _CRTIMP __cdecl __MINGW_NOTHROW int _fgetchar (void);
875 _CRTIMP __cdecl __MINGW_NOTHROW int _fputchar (int);
876 _CRTIMP __cdecl __MINGW_NOTHROW FILE * _fdopen (int, const char *);
877 _CRTIMP __cdecl __MINGW_NOTHROW int _fileno (FILE *);
878 _CRTIMP __cdecl __MINGW_NOTHROW int _fcloseall (void);
879 _CRTIMP __cdecl __MINGW_NOTHROW FILE * _fsopen (const char *, const char *, int);
881 _CRTIMP __cdecl __MINGW_NOTHROW int _getmaxstdio (void);
882 _CRTIMP __cdecl __MINGW_NOTHROW int _setmaxstdio (int);
885 /* Microsoft introduced a capability in MSVCR80.DLL and later, to
886 * set the minimum number of digits to be displayed in a printf()
887 * floating point exponent; they retro-fitted this in MSVCRT.DLL,
888 * from Windows-Vista onwards, but we provide our own wrappers in
889 * libmingwex.a, which make it possible for us to emulate the API
890 * for any version of MSVCRT.DLL (including WinXP and earlier).
892 #define _TWO_DIGIT_EXPONENT 1
894 /* While Microsoft define the preceding manifest constant, they
895 * appear to neglect to define its complement, (for restoration
896 * of their default exponent display format); for orthogonality,
897 * we will provide this regardless of Microsoft's negligence.
899 #define _THREE_DIGIT_EXPONENT 0
901 /* Once again, unspecified by Microsoft, (and mostly redundant),
902 * it is convenient to specify a combining mask for these.
904 #define _EXPONENT_DIGIT_MASK (_TWO_DIGIT_EXPONENT | _THREE_DIGIT_EXPONENT)
906 unsigned int __cdecl __mingw_get_output_format (void);
907 unsigned int __cdecl __mingw_set_output_format (unsigned int);
909 /* Also appearing for the first time in MSVCR80.DLL, and then also
910 * retro-fitted to MSVCRT.DLL from Windows-Vista onwards, was this
911 * pair of functions to control availability of "%n" formatting in
912 * the MSVCRT.DLL printf() family of functions, for which we also
913 * provide our own DLL version agnostic wrappers:
915 int __cdecl __mingw_get_printf_count_output (void);
916 int __cdecl __mingw_set_printf_count_output (int);
918 #if __MSVCRT_VERSION__ >= __MSVCR80_DLL
919 /* When the user declares that MSVCR80.DLL features are supported,
920 * we simply expose the corresponding APIs...
922 _CRTIMP unsigned int __cdecl __MINGW_NOTHROW _get_output_format (void);
923 _CRTIMP unsigned int __cdecl __MINGW_NOTHROW _set_output_format (unsigned int);
925 _CRTIMP __cdecl __MINGW_NOTHROW int _get_printf_count_output (void);
926 _CRTIMP __cdecl __MINGW_NOTHROW int _set_printf_count_output (int);
929 /* ...otherwise, we emulate the APIs, in a DLL version agnostic
930 * manner, using our own implementation wrappers.
932 __CRT_ALIAS unsigned int __cdecl _get_output_format (void)
933 { return __mingw_get_output_format (); }
935 __CRT_ALIAS unsigned int __cdecl _set_output_format (unsigned int __style)
936 { return __mingw_set_output_format (__style); }
938 /* When using our own printf() implementation, "%n" format is ALWAYS
939 * supported, so we make this API a no-op, reporting it to be so; for
940 * the alternative case, when using MSVCRT.DLL's printf(), we delegate
941 * to our wrapper API implementation, which will invoke the API function
942 * calls within the DLL, if they are available, or persistently report
943 * the state of "%n" formatting as DISABLED if they are not.
945 #if __USE_MINGW_ANSI_STDIO
946 /* Note that __USE_MINGW_ANSI_STDIO is not guaranteed to resolve to any
947 * symbol which will represent a compilable logic state; map it to this
948 * alternative which will, for the true state...
950 # define __USE_MINGW_PRINTF 1
952 /* ...and for the false.
954 # define __USE_MINGW_PRINTF 0
957 __CRT_ALIAS int __cdecl _get_printf_count_output (void)
958 { return __USE_MINGW_PRINTF ? 1 : __mingw_get_printf_count_output (); }
960 __CRT_ALIAS int __cdecl _set_printf_count_output (int __mode)
961 { return __USE_MINGW_PRINTF ? 1 : __mingw_set_printf_count_output (__mode); }
965 _CRTIMP __cdecl __MINGW_NOTHROW int fgetchar (void);
966 _CRTIMP __cdecl __MINGW_NOTHROW int fputchar (int);
967 _CRTIMP __cdecl __MINGW_NOTHROW FILE * fdopen (int, const char *);
968 _CRTIMP __cdecl __MINGW_NOTHROW int fileno (FILE *);
969 #endif /* !_NO_OLDNAMES */
971 #define _fileno(__F) ((__F)->_file)
973 #define fileno(__F) ((__F)->_file)
976 #if defined (__MSVCRT__) && ! defined (__NO_MINGW_LFS)
977 __CRT_ALIAS FILE * __cdecl __MINGW_NOTHROW fopen64 (const char *, const char *);
978 __CRT_ALIAS __JMPSTUB__(( FUNCTION = fopen64, REMAPPED = fopen ))
979 FILE * __cdecl __MINGW_NOTHROW fopen64 (const char * filename, const char * mode)
980 { return fopen (filename, mode); }
982 int __cdecl __MINGW_NOTHROW fseeko64 (FILE *, __off64_t, int);
984 #ifdef __USE_MINGW_FSEEK
985 /* When this option is selected, we need to redirect calls to _fseeki64()
986 * and fseeko64() through a MinGW specific wrapper. Since the two functions
987 * are fundamentally identical, differing only in the type of the "offset"
988 * argument, (and both types are effectively 64-bit signed ints anyway),
989 * the same wrapper will suffice for both.
991 __CRT_ALIAS int _fseeki64( FILE *__fp, __int64 __offset, int __whence )
992 { return __mingw_fseek( __fp, (__off64_t)(__offset), __whence ); }
994 __CRT_ALIAS int fseeko64( FILE *__fp, __off64_t __offset, int __whence )
995 { return __mingw_fseek( __fp, __offset, __whence ); }
998 __off64_t __cdecl __MINGW_NOTHROW ftello64 (FILE *);
1000 #endif /* __MSVCRT__ && !__NO_MINGW_LFS */
1001 #endif /* !__STRICT_ANSI__ */
1002 #endif /* _STDIO_H */
1004 #if ! (defined _STDIO_H && defined _WCHAR_H)
1005 /* The following are declared when including either <stdio.h> or <wchar.h>.
1006 * If both header include guards are now in place, then we must currently be
1007 * including <stdio.h> in its own right, having already processed this block
1008 * during prior partial inclusion by <wchar.h>; there is no need to process
1011 _CRTIMP __cdecl __MINGW_NOTHROW int fwprintf (FILE *, const wchar_t *, ...);
1012 _CRTIMP __cdecl __MINGW_NOTHROW int wprintf (const wchar_t *, ...);
1013 _CRTIMP __cdecl __MINGW_NOTHROW int vfwprintf (FILE *, const wchar_t *, __VALIST);
1014 _CRTIMP __cdecl __MINGW_NOTHROW int vwprintf (const wchar_t *, __VALIST);
1015 _CRTIMP __cdecl __MINGW_NOTHROW int _snwprintf (wchar_t *, size_t, const wchar_t *, ...);
1016 _CRTIMP __cdecl __MINGW_NOTHROW int _vscwprintf (const wchar_t *, __VALIST);
1017 _CRTIMP __cdecl __MINGW_NOTHROW int _vsnwprintf (wchar_t *, size_t, const wchar_t *, __VALIST);
1018 _CRTIMP __cdecl __MINGW_NOTHROW int fwscanf (FILE *, const wchar_t *, ...);
1019 _CRTIMP __cdecl __MINGW_NOTHROW int wscanf (const wchar_t *, ...);
1020 _CRTIMP __cdecl __MINGW_NOTHROW int swscanf (const wchar_t *, const wchar_t *, ...);
1021 _CRTIMP __cdecl __MINGW_NOTHROW wint_t fgetwc (FILE *);
1022 _CRTIMP __cdecl __MINGW_NOTHROW wint_t fputwc (wchar_t, FILE *);
1023 _CRTIMP __cdecl __MINGW_NOTHROW wint_t ungetwc (wchar_t, FILE *);
1025 #ifndef __STRICT_ANSI__
1026 /* These differ from the ISO C prototypes, which have a maxlen parameter (like snprintf).
1028 _CRTIMP __cdecl __MINGW_NOTHROW int swprintf (wchar_t *, const wchar_t *, ...);
1029 _CRTIMP __cdecl __MINGW_NOTHROW int vswprintf (wchar_t *, const wchar_t *, __VALIST);
1033 _CRTIMP __cdecl __MINGW_NOTHROW wchar_t * fgetws (wchar_t *, int, FILE *);
1034 _CRTIMP __cdecl __MINGW_NOTHROW int fputws (const wchar_t *, FILE *);
1035 _CRTIMP __cdecl __MINGW_NOTHROW wint_t getwc (FILE *);
1036 _CRTIMP __cdecl __MINGW_NOTHROW wint_t getwchar (void);
1037 _CRTIMP __cdecl __MINGW_NOTHROW wint_t putwc (wint_t, FILE *);
1038 _CRTIMP __cdecl __MINGW_NOTHROW wint_t putwchar (wint_t);
1040 #ifndef __STRICT_ANSI__
1041 _CRTIMP __cdecl __MINGW_NOTHROW wchar_t * _getws (wchar_t *);
1042 _CRTIMP __cdecl __MINGW_NOTHROW int _putws (const wchar_t *);
1043 _CRTIMP __cdecl __MINGW_NOTHROW FILE * _wfdopen(int, const wchar_t *);
1044 _CRTIMP __cdecl __MINGW_NOTHROW FILE * _wfopen (const wchar_t *, const wchar_t *);
1045 _CRTIMP __cdecl __MINGW_NOTHROW FILE * _wfreopen (const wchar_t *, const wchar_t *, FILE *);
1046 _CRTIMP __cdecl __MINGW_NOTHROW FILE * _wfsopen (const wchar_t *, const wchar_t *, int);
1047 _CRTIMP __cdecl __MINGW_NOTHROW wchar_t * _wtmpnam (wchar_t *);
1048 _CRTIMP __cdecl __MINGW_NOTHROW wchar_t * _wtempnam (const wchar_t *, const wchar_t *);
1049 _CRTIMP __cdecl __MINGW_NOTHROW int _wrename (const wchar_t *, const wchar_t *);
1050 _CRTIMP __cdecl __MINGW_NOTHROW int _wremove (const wchar_t *);
1051 _CRTIMP __cdecl __MINGW_NOTHROW void _wperror (const wchar_t *);
1052 _CRTIMP __cdecl __MINGW_NOTHROW FILE * _wpopen (const wchar_t *, const wchar_t *);
1054 #endif /* !__STRICT_ANSI__ */
1055 #endif /* __MSVCRT__ */
1057 #ifdef _ISOC99_SOURCE
1058 __JMPSTUB__(( FUNCTION = snwprintf, DLLENTRY = _snwprintf ))
1059 __cdecl __MINGW_NOTHROW int snwprintf (wchar_t *, size_t, const wchar_t *, ...);
1060 __cdecl __MINGW_NOTHROW int vsnwprintf (wchar_t *, size_t, const wchar_t *, __VALIST);
1062 #ifndef __NO_INLINE__
1063 __CRT_INLINE __cdecl __MINGW_NOTHROW
1064 __JMPSTUB__(( FUNCTION = vsnwprintf, DLLENTRY = _vsnwprintf ))
1065 int vsnwprintf (wchar_t *__s, size_t __n, const wchar_t *__fmt, __VALIST __arg)
1066 { return _vsnwprintf ( __s, __n, __fmt, __arg); }
1069 __cdecl __MINGW_NOTHROW int vwscanf (const wchar_t *__restrict__, __VALIST);
1070 __cdecl __MINGW_NOTHROW
1071 int vfwscanf (FILE *__restrict__, const wchar_t *__restrict__, __VALIST);
1072 __cdecl __MINGW_NOTHROW
1073 int vswscanf (const wchar_t *__restrict__, const wchar_t * __restrict__, __VALIST);
1075 #endif /* _ISOC99_SOURCE */
1076 #endif /* ! (_STDIO_H && _WCHAR_H) */
1078 #if defined _STDIO_H && ! defined __STRICT_ANSI__
1079 #if defined __MSVCRT__ && ! defined _NO_OLDNAMES
1080 _CRTIMP __cdecl __MINGW_NOTHROW FILE * wpopen (const wchar_t *, const wchar_t *);
1083 /* Other non-ANSI wide character functions...
1085 _CRTIMP __cdecl __MINGW_NOTHROW wint_t _fgetwchar (void);
1086 _CRTIMP __cdecl __MINGW_NOTHROW wint_t _fputwchar (wint_t);
1087 _CRTIMP __cdecl __MINGW_NOTHROW int _getw (FILE *);
1088 _CRTIMP __cdecl __MINGW_NOTHROW int _putw (int, FILE *);
1090 #ifndef _NO_OLDNAMES
1091 /* ...and their original names, before Microsoft uglification...
1093 _CRTIMP __cdecl __MINGW_NOTHROW wint_t fgetwchar (void);
1094 _CRTIMP __cdecl __MINGW_NOTHROW wint_t fputwchar (wint_t);
1095 _CRTIMP __cdecl __MINGW_NOTHROW int getw (FILE *);
1096 _CRTIMP __cdecl __MINGW_NOTHROW int putw (int, FILE *);
1098 #endif /* !_NO_OLDNAMES */
1099 #endif /* !__STRICT_ANSI__ */
1103 #endif /* ! RC_INVOKED */
1104 #endif /* !_STDIO_H: $RCSfile$: end of file */