3 * This file has no copyright assigned and is placed in the Public Domain.
4 * This file is a part of the mingw-runtime package.
5 * No warranty is given; refer to the file DISCLAIMER within the package.
7 * Definitions of types and prototypes of functions for standard input and
10 * NOTE: The file manipulation functions provided by Microsoft seem to
11 * work with either slash (/) or backslash (\) as the directory separator.
18 /* All the headers include this file. */
24 #define __need_wchar_t
27 #define __need___va_list
29 #endif /* Not RC_INVOKED */
32 /* Flags for the iobuf structure */
33 #define _IOREAD 1 /* currently reading */
34 #define _IOWRT 2 /* currently writing */
35 #define _IORW 0x0080 /* opened as "r+w" */
39 * The three standard file pointers provided by the run time library.
40 * NOTE: These will go to the bit-bucket silently in GUI applications!
42 #define STDIN_FILENO 0
43 #define STDOUT_FILENO 1
44 #define STDERR_FILENO 2
46 /* Returned by various functions on end of file condition or error. */
50 * The maximum length of a file name. You should use GetVolumeInformation
51 * instead of this constant. But hey, this works.
52 * Also defined in io.h.
55 #define FILENAME_MAX (260)
59 * The maximum number of files that may be open at once. I have set this to
60 * a conservative number. The actual value may be higher.
62 #define FOPEN_MAX (20)
64 /* After creating this many names, tmpnam and tmpfile return NULL */
67 * Tmpnam, tmpfile and, sometimes, _tempnam try to create
68 * temp files in the root directory of the current drive
69 * (not in pwd, as suggested by some older MS doc's).
70 * Redefining these macros does not effect the CRT functions.
72 #define _P_tmpdir "\\"
73 #ifndef __STRICT_ANSI__
74 #define P_tmpdir _P_tmpdir
76 #define _wP_tmpdir L"\\"
79 * The maximum size of name (including NUL) that will be put in the user
80 * supplied buffer caName for tmpnam.
81 * Inferred from the size of the static buffer returned by tmpnam
82 * when passed a NULL argument. May actually be smaller.
86 #define _IOFBF 0x0000 /* full buffered */
87 #define _IOLBF 0x0040 /* line buffered */
88 #define _IONBF 0x0004 /* not buffered */
90 #define _IOMYBUF 0x0008 /* stdio malloc()'d buffer */
91 #define _IOEOF 0x0010 /* EOF reached on read */
92 #define _IOERR 0x0020 /* I/O error from system */
93 #define _IOSTRG 0x0040 /* Strange or no file descriptor */
95 # define _IOAPPEND 0x0200
98 * The buffer size as used by setbuf such that it is equivalent to
99 * (void) setvbuf(fileSetBuffer, caBuffer, _IOFBF, BUFSIZ).
103 /* Constants for nOrigin indicating the position relative to which fseek
104 * sets the file position. Defined unconditionally since ISO and POSIX
105 * say they are defined here.
115 #define __VALIST __gnuc_va_list
117 #define __VALIST char*
119 #endif /* defined __VALIST */
122 * The structure underlying the FILE type.
124 * Some believe that nobody in their right mind should make use of the
125 * internals of this structure. Provided by Pedro A. Aranda Gutiirrez
128 #ifndef _FILE_DEFINED
129 #define _FILE_DEFINED
130 typedef struct _iobuf
141 #endif /* Not _FILE_DEFINED */
145 * The standard file handles
147 #ifndef __DECLSPEC_SUPPORTED
149 extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */
151 #define _iob (*_imp___iob) /* An array of FILE */
153 #else /* __DECLSPEC_SUPPORTED */
155 __MINGW_IMPORT FILE _iob[]; /* An array of FILE imported from DLL. */
157 #endif /* __DECLSPEC_SUPPORTED */
159 #define stdin (&_iob[STDIN_FILENO])
160 #define stdout (&_iob[STDOUT_FILENO])
161 #define stderr (&_iob[STDERR_FILENO])
168 _CRTIMP FILE* __cdecl __MINGW_NOTHROW fopen (const char*, const char*);
169 _CRTIMP FILE* __cdecl __MINGW_NOTHROW freopen (const char*, const char*, FILE*);
170 _CRTIMP int __cdecl __MINGW_NOTHROW fflush (FILE*);
171 _CRTIMP int __cdecl __MINGW_NOTHROW fclose (FILE*);
172 /* MS puts remove & rename (but not wide versions) in io.h also */
173 _CRTIMP int __cdecl __MINGW_NOTHROW remove (const char*);
174 _CRTIMP int __cdecl __MINGW_NOTHROW rename (const char*, const char*);
175 _CRTIMP FILE* __cdecl __MINGW_NOTHROW tmpfile (void);
176 _CRTIMP char* __cdecl __MINGW_NOTHROW tmpnam (char*);
178 #ifndef __STRICT_ANSI__
179 _CRTIMP char* __cdecl __MINGW_NOTHROW _tempnam (const char*, const char*);
180 _CRTIMP int __cdecl __MINGW_NOTHROW _rmtmp(void);
181 _CRTIMP int __cdecl __MINGW_NOTHROW _unlink (const char*);
184 _CRTIMP char* __cdecl __MINGW_NOTHROW tempnam (const char*, const char*);
185 _CRTIMP int __cdecl __MINGW_NOTHROW rmtmp(void);
186 _CRTIMP int __cdecl __MINGW_NOTHROW unlink (const char*);
188 #endif /* __STRICT_ANSI__ */
190 _CRTIMP int __cdecl __MINGW_NOTHROW setvbuf (FILE*, char*, int, size_t);
191 _CRTIMP void __cdecl __MINGW_NOTHROW setbuf (FILE*, char*);
195 * MSVCRT implementations are not ANSI C99 conformant...
196 * we offer these conforming alternatives from libmingwex.a
198 #undef __mingw_stdio_redirect__
199 #define __mingw_stdio_redirect__(F) __cdecl __MINGW_NOTHROW __mingw_##F
201 extern int __mingw_stdio_redirect__(fprintf)(FILE*, const char*, ...);
202 extern int __mingw_stdio_redirect__(printf)(const char*, ...);
203 extern int __mingw_stdio_redirect__(sprintf)(char*, const char*, ...);
204 extern int __mingw_stdio_redirect__(snprintf)(char*, size_t, const char*, ...);
205 extern int __mingw_stdio_redirect__(vfprintf)(FILE*, const char*, __VALIST);
206 extern int __mingw_stdio_redirect__(vprintf)(const char*, __VALIST);
207 extern int __mingw_stdio_redirect__(vsprintf)(char*, const char*, __VALIST);
208 extern int __mingw_stdio_redirect__(vsnprintf)(char*, size_t, const char*, __VALIST);
210 /* When using these C99 conforming alternatives, we may wish to support
211 * some of Microsoft's quirky formatting options, even when they violate
212 * strict C99 conformance.
214 #define _MSVC_PRINTF_QUIRKS 0x0100U
215 #define _QUERY_MSVC_PRINTF_QUIRKS ~0U, 0U
216 #define _DISABLE_MSVC_PRINTF_QUIRKS ~_MSVC_PRINTF_QUIRKS, 0U
217 #define _ENABLE_MSVC_PRINTF_QUIRKS ~0U, _MSVC_PRINTF_QUIRKS
219 /* Those quirks which conflict with ANSI C99 specified behaviour are
220 * disabled by default; use the following function, like this:
222 * _mingw_output_format_control( _ENABLE_MSVC_PRINTF_QUIRKS );
224 * to enable them, like this:
226 * state = _mingw_output_format_control( _QUERY_MSVC_PRINTF_QUIRKS )
227 * & _MSVC_PRINTF_QUIRKS;
229 * to ascertain the currently active enabled state, or like this:
231 * _mingw_output_format_control( _DISABLE_MSVC_PRINTF_QUIRKS );
233 * to disable them again.
235 extern unsigned int _mingw_output_format_control( unsigned int, unsigned int );
237 #if __USE_MINGW_ANSI_STDIO
239 * User has expressed a preference for C99 conformance...
241 # undef __mingw_stdio_redirect__
244 * For C++ we use inline implementations, to avoid interference
245 * with namespace qualification, which may result from using #defines.
247 # define __mingw_stdio_redirect__ inline __cdecl __MINGW_NOTHROW
249 # elif defined __GNUC__
251 * FIXME: Is there any GCC version prerequisite here?
253 * We also prefer inline implementations for C, when we can be confident
254 * that the GNU specific __inline__ mechanism is supported.
256 # define __mingw_stdio_redirect__ static __inline__ __cdecl __MINGW_NOTHROW
260 * Can't use inlines; fall back on module local static stubs.
262 # define __mingw_stdio_redirect__ static __cdecl __MINGW_NOTHROW
265 __mingw_stdio_redirect__
266 int fprintf (FILE *__stream, const char *__format, ...)
268 register int __retval;
269 __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
270 __retval = __mingw_vfprintf( __stream, __format, __local_argv );
271 __builtin_va_end( __local_argv );
275 __mingw_stdio_redirect__
276 int printf (const char *__format, ...)
278 register int __retval;
279 __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
280 __retval = __mingw_vprintf( __format, __local_argv );
281 __builtin_va_end( __local_argv );
285 __mingw_stdio_redirect__
286 int sprintf (char *__stream, const char *__format, ...)
288 register int __retval;
289 __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
290 __retval = __mingw_vsprintf( __stream, __format, __local_argv );
291 __builtin_va_end( __local_argv );
295 __mingw_stdio_redirect__
296 int vfprintf (FILE *__stream, const char *__format, __VALIST __local_argv)
298 return __mingw_vfprintf( __stream, __format, __local_argv );
301 __mingw_stdio_redirect__
302 int vprintf (const char *__format, __VALIST __local_argv)
304 return __mingw_vprintf( __format, __local_argv );
307 __mingw_stdio_redirect__
308 int vsprintf (char *__stream, const char *__format, __VALIST __local_argv)
310 return __mingw_vsprintf( __stream, __format, __local_argv );
315 * Default configuration: simply direct all calls to MSVCRT...
317 _CRTIMP int __cdecl __MINGW_NOTHROW fprintf (FILE*, const char*, ...);
318 _CRTIMP int __cdecl __MINGW_NOTHROW printf (const char*, ...);
319 _CRTIMP int __cdecl __MINGW_NOTHROW sprintf (char*, const char*, ...);
320 _CRTIMP int __cdecl __MINGW_NOTHROW vfprintf (FILE*, const char*, __VALIST);
321 _CRTIMP int __cdecl __MINGW_NOTHROW vprintf (const char*, __VALIST);
322 _CRTIMP int __cdecl __MINGW_NOTHROW vsprintf (char*, const char*, __VALIST);
326 * Regardless of user preference, always offer these alternative
327 * entry points, for direct access to the MSVCRT implementations.
329 #undef __mingw_stdio_redirect__
330 #define __mingw_stdio_redirect__(F) __cdecl __MINGW_NOTHROW __msvcrt_##F
332 _CRTIMP int __mingw_stdio_redirect__(fprintf)(FILE*, const char*, ...);
333 _CRTIMP int __mingw_stdio_redirect__(printf)(const char*, ...);
334 _CRTIMP int __mingw_stdio_redirect__(sprintf)(char*, const char*, ...);
335 _CRTIMP int __mingw_stdio_redirect__(vfprintf)(FILE*, const char*, __VALIST);
336 _CRTIMP int __mingw_stdio_redirect__(vprintf)(const char*, __VALIST);
337 _CRTIMP int __mingw_stdio_redirect__(vsprintf)(char*, const char*, __VALIST);
339 #undef __mingw_stdio_redirect__
341 /* The following three ALWAYS refer to the MSVCRT implementations...
343 _CRTIMP int __cdecl __MINGW_NOTHROW _snprintf (char*, size_t, const char*, ...);
344 _CRTIMP int __cdecl __MINGW_NOTHROW _vsnprintf (char*, size_t, const char*, __VALIST);
345 _CRTIMP int __cdecl __MINGW_NOTHROW _vscprintf (const char*, __VALIST);
347 #ifndef __NO_ISOCEXT /* externs in libmingwex.a */
349 * Microsoft does not provide implementations for the following,
350 * which are required by C99. Note in particular that the corresponding
351 * Microsoft implementations of _snprintf() and _vsnprintf() are *not*
352 * compatible with C99, but the following are; if you want the MSVCRT
353 * behaviour, you *must* use the Microsoft uglified names.
355 int __cdecl __MINGW_NOTHROW snprintf (char *, size_t, const char *, ...);
356 int __cdecl __MINGW_NOTHROW vsnprintf (char *, size_t, const char *, __VALIST);
358 int __cdecl __MINGW_NOTHROW vscanf (const char * __restrict__, __VALIST);
359 int __cdecl __MINGW_NOTHROW vfscanf (FILE * __restrict__, const char * __restrict__,
361 int __cdecl __MINGW_NOTHROW vsscanf (const char * __restrict__,
362 const char * __restrict__, __VALIST);
364 #endif /* !__NO_ISOCEXT */
370 _CRTIMP int __cdecl __MINGW_NOTHROW fscanf (FILE*, const char*, ...);
371 _CRTIMP int __cdecl __MINGW_NOTHROW scanf (const char*, ...);
372 _CRTIMP int __cdecl __MINGW_NOTHROW sscanf (const char*, const char*, ...);
374 * Character Input and Output Functions
377 _CRTIMP int __cdecl __MINGW_NOTHROW fgetc (FILE*);
378 _CRTIMP char* __cdecl __MINGW_NOTHROW fgets (char*, int, FILE*);
379 _CRTIMP int __cdecl __MINGW_NOTHROW fputc (int, FILE*);
380 _CRTIMP int __cdecl __MINGW_NOTHROW fputs (const char*, FILE*);
381 _CRTIMP char* __cdecl __MINGW_NOTHROW gets (char*);
382 _CRTIMP int __cdecl __MINGW_NOTHROW puts (const char*);
383 _CRTIMP int __cdecl __MINGW_NOTHROW ungetc (int, FILE*);
385 /* Traditionally, getc and putc are defined as macros. but the
386 standard doesn't say that they must be macros.
387 We use inline functions here to allow the fast versions
388 to be used in C++ with namespace qualification, eg., ::getc.
390 _filbuf and _flsbuf are not thread-safe. */
391 _CRTIMP int __cdecl __MINGW_NOTHROW _filbuf (FILE*);
392 _CRTIMP int __cdecl __MINGW_NOTHROW _flsbuf (int, FILE*);
396 __CRT_INLINE int __cdecl __MINGW_NOTHROW getc (FILE* __F)
398 return (--__F->_cnt >= 0)
399 ? (int) (unsigned char) *__F->_ptr++
403 __CRT_INLINE int __cdecl __MINGW_NOTHROW putc (int __c, FILE* __F)
405 return (--__F->_cnt >= 0)
406 ? (int) (unsigned char) (*__F->_ptr++ = (char)__c)
407 : _flsbuf (__c, __F);
410 __CRT_INLINE int __cdecl __MINGW_NOTHROW getchar (void)
412 return (--stdin->_cnt >= 0)
413 ? (int) (unsigned char) *stdin->_ptr++
417 __CRT_INLINE int __cdecl __MINGW_NOTHROW putchar(int __c)
419 return (--stdout->_cnt >= 0)
420 ? (int) (unsigned char) (*stdout->_ptr++ = (char)__c)
421 : _flsbuf (__c, stdout);}
423 #else /* Use library functions. */
425 _CRTIMP int __cdecl __MINGW_NOTHROW getc (FILE*);
426 _CRTIMP int __cdecl __MINGW_NOTHROW putc (int, FILE*);
427 _CRTIMP int __cdecl __MINGW_NOTHROW getchar (void);
428 _CRTIMP int __cdecl __MINGW_NOTHROW putchar (int);
433 * Direct Input and Output Functions
436 _CRTIMP size_t __cdecl __MINGW_NOTHROW fread (void*, size_t, size_t, FILE*);
437 _CRTIMP size_t __cdecl __MINGW_NOTHROW fwrite (const void*, size_t, size_t, FILE*);
440 * File Positioning Functions
443 _CRTIMP int __cdecl __MINGW_NOTHROW fseek (FILE*, long, int);
444 _CRTIMP long __cdecl __MINGW_NOTHROW ftell (FILE*);
445 _CRTIMP void __cdecl __MINGW_NOTHROW rewind (FILE*);
447 #if __MSVCRT_VERSION__ >= 0x800
448 _CRTIMP int __cdecl __MINGW_NOTHROW _fseek_nolock (FILE*, long, int);
449 _CRTIMP long __cdecl __MINGW_NOTHROW _ftell_nolock (FILE*);
451 _CRTIMP int __cdecl __MINGW_NOTHROW _fseeki64 (FILE*, __int64, int);
452 _CRTIMP __int64 __cdecl __MINGW_NOTHROW _ftelli64 (FILE*);
453 _CRTIMP int __cdecl __MINGW_NOTHROW _fseeki64_nolock (FILE*, __int64, int);
454 _CRTIMP __int64 __cdecl __MINGW_NOTHROW _ftelli64_nolock (FILE*);
457 #ifdef __USE_MINGW_FSEEK /* These are in libmingwex.a */
459 * Workaround for limitations on win9x where a file contents are
460 * not zero'd out if you seek past the end and then write.
463 int __cdecl __MINGW_NOTHROW __mingw_fseek (FILE *, long, int);
464 size_t __cdecl __MINGW_NOTHROW __mingw_fwrite (const void*, size_t, size_t, FILE*);
465 #define fseek(fp, offset, whence) __mingw_fseek(fp, offset, whence)
466 #define fwrite(buffer, size, count, fp) __mingw_fwrite(buffer, size, count, fp)
467 #endif /* __USE_MINGW_FSEEK */
470 * An opaque data type used for storing file positions... The contents of
471 * this type are unknown, but we (the compiler) need to know the size
472 * because the programmer using fgetpos and fsetpos will be setting aside
473 * storage for fpos_t structres. Actually I tested using a byte array and
474 * it is fairly evident that the fpos_t type is a long (in CRTDLL.DLL).
475 * Perhaps an unsigned long? TODO? It's definitely a 64-bit number in
476 * MSVCRT however, and for now `long long' will do.
479 typedef long long fpos_t;
484 _CRTIMP int __cdecl __MINGW_NOTHROW fgetpos (FILE*, fpos_t*);
485 _CRTIMP int __cdecl __MINGW_NOTHROW fsetpos (FILE*, const fpos_t*);
491 _CRTIMP int __cdecl __MINGW_NOTHROW feof (FILE*);
492 _CRTIMP int __cdecl __MINGW_NOTHROW ferror (FILE*);
495 inline int __cdecl __MINGW_NOTHROW feof (FILE* __F)
496 { return __F->_flag & _IOEOF; }
497 inline int __cdecl __MINGW_NOTHROW ferror (FILE* __F)
498 { return __F->_flag & _IOERR; }
500 #define feof(__F) ((__F)->_flag & _IOEOF)
501 #define ferror(__F) ((__F)->_flag & _IOERR)
504 _CRTIMP void __cdecl __MINGW_NOTHROW clearerr (FILE*);
505 _CRTIMP void __cdecl __MINGW_NOTHROW perror (const char*);
508 #ifndef __STRICT_ANSI__
512 _CRTIMP FILE* __cdecl __MINGW_NOTHROW _popen (const char*, const char*);
513 _CRTIMP int __cdecl __MINGW_NOTHROW _pclose (FILE*);
516 _CRTIMP FILE* __cdecl __MINGW_NOTHROW popen (const char*, const char*);
517 _CRTIMP int __cdecl __MINGW_NOTHROW pclose (FILE*);
521 * Other Non ANSI functions
523 _CRTIMP int __cdecl __MINGW_NOTHROW _flushall (void);
524 _CRTIMP int __cdecl __MINGW_NOTHROW _fgetchar (void);
525 _CRTIMP int __cdecl __MINGW_NOTHROW _fputchar (int);
526 _CRTIMP FILE* __cdecl __MINGW_NOTHROW _fdopen (int, const char*);
527 _CRTIMP int __cdecl __MINGW_NOTHROW _fileno (FILE*);
528 _CRTIMP int __cdecl __MINGW_NOTHROW _fcloseall (void);
529 _CRTIMP FILE* __cdecl __MINGW_NOTHROW _fsopen (const char*, const char*, int);
531 _CRTIMP int __cdecl __MINGW_NOTHROW _getmaxstdio (void);
532 _CRTIMP int __cdecl __MINGW_NOTHROW _setmaxstdio (int);
535 /* Microsoft introduced a capability in MSVCR80.DLL and later, to
536 * set the minimum number of digits to be displayed in a printf()
537 * floating point exponent; they retro-fitted this in MSVCRT.DLL,
538 * from Windows-Vista onwards, but we provide our own wrappers in
539 * libmingwex.a, which make it possible for us to emulate the API
540 * for any version of MSVCRT.DLL (including WinXP and earlier).
542 #define _TWO_DIGIT_EXPONENT 1
544 /* While Microsoft define the preceding manifest constant, they
545 * appear to neglect to define its complement, (for restoration
546 * of their default exponent display format); for orthogonality,
547 * we will provide this regardless of Microsoft's negligence.
549 #define _THREE_DIGIT_EXPONENT 0
551 /* Once again, unspecified by Microsoft, (and mostly redundant),
552 * it is convenient to specify a combining mask for these.
554 #define _EXPONENT_DIGIT_MASK (_TWO_DIGIT_EXPONENT | _THREE_DIGIT_EXPONENT)
556 unsigned int __cdecl __mingw_get_output_format (void);
557 unsigned int __cdecl __mingw_set_output_format (unsigned int);
559 /* Also appearing for the first time in MSVCR80.DLL, and then also
560 * retro-fitted to MSVCRT.DLL from Windows-Vista onwards, was this
561 * pair of functions to control availability of "%n" formatting in
562 * the MSVCRT.DLL printf() family of functions, for which we also
563 * provide our own DLL version agnostic wrappers:
565 int __cdecl __mingw_get_printf_count_output (void);
566 int __cdecl __mingw_set_printf_count_output (int);
568 #if __MSVCRT_VERSION__ >= 0x800
570 * When the user declares that MSVCR80.DLL features are supported,
571 * we simply expose the corresponding APIs...
573 _CRTIMP unsigned int __cdecl __MINGW_NOTHROW _get_output_format (void);
574 _CRTIMP unsigned int __cdecl __MINGW_NOTHROW _set_output_format (unsigned int);
576 _CRTIMP int __cdecl __MINGW_NOTHROW _get_printf_count_output (void);
577 _CRTIMP int __cdecl __MINGW_NOTHROW _set_printf_count_output (int);
580 /* ...otherwise, we emulate the APIs, in a DLL version agnostic
581 * manner, using our own implementation wrappers.
583 __CRT_ALIAS unsigned int __cdecl _get_output_format (void)
584 { return __mingw_get_output_format (); }
586 __CRT_ALIAS unsigned int __cdecl _set_output_format (unsigned int __style)
587 { return __mingw_set_output_format (__style); }
589 /* When using our own printf() implementation, "%n" format is ALWAYS
590 * supported, so we make this API a no-op, reporting it to be so; for
591 * the alternative case, when using MSVCRT.DLL's printf(), we delegate
592 * to our wrapper API implementation, which will invoke the API function
593 * calls within the DLL, if they are available, or persistently report
594 * the state of "%n" formatting as DISABLED if they are not.
596 #if __USE_MINGW_ANSI_STDIO
598 * Note that __USE_MINGW_ANSI_STDIO is not guaranteed to resolve to any
599 * symbol which will represent a compilable logic state; map it to this
600 * alternative which will, for the true state...
602 # define __USE_MINGW_PRINTF 1
604 /* ...and for the false.
606 # define __USE_MINGW_PRINTF 0
609 __CRT_ALIAS int __cdecl _get_printf_count_output (void)
610 { return __USE_MINGW_PRINTF ? 1 : __mingw_get_printf_count_output (); }
612 __CRT_ALIAS int __cdecl _set_printf_count_output (int __mode)
613 { return __USE_MINGW_PRINTF ? 1 : __mingw_set_printf_count_output (__mode); }
617 _CRTIMP int __cdecl __MINGW_NOTHROW fgetchar (void);
618 _CRTIMP int __cdecl __MINGW_NOTHROW fputchar (int);
619 _CRTIMP FILE* __cdecl __MINGW_NOTHROW fdopen (int, const char*);
620 _CRTIMP int __cdecl __MINGW_NOTHROW fileno (FILE*);
621 #endif /* Not _NO_OLDNAMES */
623 #define _fileno(__F) ((__F)->_file)
625 #define fileno(__F) ((__F)->_file)
628 #if defined (__MSVCRT__) && !defined (__NO_MINGW_LFS)
629 #include <sys/types.h>
630 __CRT_INLINE __JMPSTUB__(( FUNCTION = fopen64, REMAPPED = fopen ))
631 FILE* __cdecl __MINGW_NOTHROW fopen64 (const char* filename, const char* mode)
632 { return fopen (filename, mode); }
634 int __cdecl __MINGW_NOTHROW fseeko64 (FILE*, off64_t, int);
636 #ifdef __USE_MINGW_FSEEK
637 int __cdecl __MINGW_NOTHROW __mingw_fseeko64 (FILE *, off64_t, int);
638 #define fseeko64(fp, offset, whence) __mingw_fseeko64(fp, offset, whence)
641 __CRT_INLINE __LIBIMPL__(( FUNCTION = ftello64 ))
642 off64_t __cdecl __MINGW_NOTHROW ftello64 (FILE * stream)
645 if (fgetpos(stream, &pos))
648 return ((off64_t) pos);
650 #endif /* __NO_MINGW_LFS */
652 #endif /* Not __STRICT_ANSI__ */
656 #ifndef _WSTDIO_DEFINED
657 /* also in wchar.h - keep in sync */
658 _CRTIMP int __cdecl __MINGW_NOTHROW fwprintf (FILE*, const wchar_t*, ...);
659 _CRTIMP int __cdecl __MINGW_NOTHROW wprintf (const wchar_t*, ...);
660 _CRTIMP int __cdecl __MINGW_NOTHROW _snwprintf (wchar_t*, size_t, const wchar_t*, ...);
661 _CRTIMP int __cdecl __MINGW_NOTHROW vfwprintf (FILE*, const wchar_t*, __VALIST);
662 _CRTIMP int __cdecl __MINGW_NOTHROW vwprintf (const wchar_t*, __VALIST);
663 _CRTIMP int __cdecl __MINGW_NOTHROW _vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST);
664 _CRTIMP int __cdecl __MINGW_NOTHROW _vscwprintf (const wchar_t*, __VALIST);
665 _CRTIMP int __cdecl __MINGW_NOTHROW fwscanf (FILE*, const wchar_t*, ...);
666 _CRTIMP int __cdecl __MINGW_NOTHROW wscanf (const wchar_t*, ...);
667 _CRTIMP int __cdecl __MINGW_NOTHROW swscanf (const wchar_t*, const wchar_t*, ...);
668 _CRTIMP wint_t __cdecl __MINGW_NOTHROW fgetwc (FILE*);
669 _CRTIMP wint_t __cdecl __MINGW_NOTHROW fputwc (wchar_t, FILE*);
670 _CRTIMP wint_t __cdecl __MINGW_NOTHROW ungetwc (wchar_t, FILE*);
672 /* These differ from the ISO C prototypes, which have a maxlen parameter (like snprintf). */
673 #ifndef __STRICT_ANSI__
674 _CRTIMP int __cdecl __MINGW_NOTHROW swprintf (wchar_t*, const wchar_t*, ...);
675 _CRTIMP int __cdecl __MINGW_NOTHROW vswprintf (wchar_t*, const wchar_t*, __VALIST);
679 _CRTIMP wchar_t* __cdecl __MINGW_NOTHROW fgetws (wchar_t*, int, FILE*);
680 _CRTIMP int __cdecl __MINGW_NOTHROW fputws (const wchar_t*, FILE*);
681 _CRTIMP wint_t __cdecl __MINGW_NOTHROW getwc (FILE*);
682 _CRTIMP wint_t __cdecl __MINGW_NOTHROW getwchar (void);
683 _CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _getws (wchar_t*);
684 _CRTIMP wint_t __cdecl __MINGW_NOTHROW putwc (wint_t, FILE*);
685 _CRTIMP int __cdecl __MINGW_NOTHROW _putws (const wchar_t*);
686 _CRTIMP wint_t __cdecl __MINGW_NOTHROW putwchar (wint_t);
687 _CRTIMP FILE* __cdecl __MINGW_NOTHROW _wfdopen(int, const wchar_t *);
688 _CRTIMP FILE* __cdecl __MINGW_NOTHROW _wfopen (const wchar_t*, const wchar_t*);
689 _CRTIMP FILE* __cdecl __MINGW_NOTHROW _wfreopen (const wchar_t*, const wchar_t*, FILE*);
690 _CRTIMP FILE* __cdecl __MINGW_NOTHROW _wfsopen (const wchar_t*, const wchar_t*, int);
691 _CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wtmpnam (wchar_t*);
692 _CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wtempnam (const wchar_t*, const wchar_t*);
693 _CRTIMP int __cdecl __MINGW_NOTHROW _wrename (const wchar_t*, const wchar_t*);
694 _CRTIMP int __cdecl __MINGW_NOTHROW _wremove (const wchar_t*);
695 _CRTIMP void __cdecl __MINGW_NOTHROW _wperror (const wchar_t*);
696 _CRTIMP FILE* __cdecl __MINGW_NOTHROW _wpopen (const wchar_t*, const wchar_t*);
697 #endif /* __MSVCRT__ */
699 #ifndef __NO_ISOCEXT /* externs in libmingwex.a */
700 int __cdecl __MINGW_NOTHROW snwprintf (wchar_t* s, size_t n, const wchar_t* format, ...);
701 int __cdecl __MINGW_NOTHROW vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg);
702 #ifndef __NO_INLINE__
703 __CRT_INLINE int __cdecl __MINGW_NOTHROW
704 vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg)
705 { return _vsnwprintf ( s, n, format, arg);}
707 int __cdecl __MINGW_NOTHROW vwscanf (const wchar_t * __restrict__, __VALIST);
708 int __cdecl __MINGW_NOTHROW vfwscanf (FILE * __restrict__,
709 const wchar_t * __restrict__, __VALIST);
710 int __cdecl __MINGW_NOTHROW vswscanf (const wchar_t * __restrict__,
711 const wchar_t * __restrict__, __VALIST);
714 #define _WSTDIO_DEFINED
715 #endif /* _WSTDIO_DEFINED */
717 #ifndef __STRICT_ANSI__
720 _CRTIMP FILE* __cdecl __MINGW_NOTHROW wpopen (const wchar_t*, const wchar_t*);
721 #endif /* not NO_OLDNAMES */
722 #endif /* MSVCRT runtime */
725 * Other Non ANSI wide functions
727 _CRTIMP wint_t __cdecl __MINGW_NOTHROW _fgetwchar (void);
728 _CRTIMP wint_t __cdecl __MINGW_NOTHROW _fputwchar (wint_t);
729 _CRTIMP int __cdecl __MINGW_NOTHROW _getw (FILE*);
730 _CRTIMP int __cdecl __MINGW_NOTHROW _putw (int, FILE*);
733 _CRTIMP wint_t __cdecl __MINGW_NOTHROW fgetwchar (void);
734 _CRTIMP wint_t __cdecl __MINGW_NOTHROW fputwchar (wint_t);
735 _CRTIMP int __cdecl __MINGW_NOTHROW getw (FILE*);
736 _CRTIMP int __cdecl __MINGW_NOTHROW putw (int, FILE*);
737 #endif /* Not _NO_OLDNAMES */
739 #endif /* __STRICT_ANSI */
743 #endif /* Not RC_INVOKED */
744 #endif /* _STDIO_H_ */