Commit af0d2067 authored by Alexandre Julliard's avatar Alexandre Julliard

Flush stdio on exit.

parent bef32c65
......@@ -202,6 +202,15 @@ void msvcrt_init_io(void)
}
}
/* free everything on process exit */
void msvcrt_free_io(void)
{
_fcloseall();
_close(0);
_close(1);
_close(2);
}
/* INTERNAL: Flush stdio file buffer */
static int msvcrt_flush_buffer(MSVCRT_FILE* file)
{
......
......@@ -33,13 +33,6 @@ static inline BOOL msvcrt_init_tls(void);
static inline BOOL msvcrt_free_tls(void);
const char* msvcrt_get_reason(DWORD reason) WINE_UNUSED;
void msvcrt_init_io(void);
void msvcrt_init_console(void);
void msvcrt_free_console(void);
void msvcrt_init_args(void);
void msvcrt_free_args(void);
void msvcrt_init_vtables(void);
typedef void* (*MSVCRT_malloc_func)(unsigned int);
typedef void (*MSVCRT_free_func)(void*);
......@@ -82,7 +75,7 @@ BOOL WINAPI MSVCRT_Init(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
break;
case DLL_PROCESS_DETACH:
msvcrt_free_mt_locks();
_fcloseall();
msvcrt_free_io();
msvcrt_free_console();
msvcrt_free_args();
if (!msvcrt_free_tls())
......
......@@ -59,7 +59,15 @@ LPWSTR msvcrt_wstrndup(LPCWSTR, unsigned int);
int MSVCRT__set_new_mode(int mode);
/* Setup and teardown multi threaded locks */
void msvcrt_init_mt_locks(void);
void msvcrt_free_mt_locks(void);
extern void msvcrt_init_mt_locks(void);
extern void msvcrt_free_mt_locks(void);
extern void msvcrt_init_io(void);
extern void msvcrt_free_io(void);
extern void msvcrt_init_console(void);
extern void msvcrt_free_console(void);
extern void msvcrt_init_args(void);
extern void msvcrt_free_args(void);
extern void msvcrt_init_vtables(void);
#endif /* __WINE_MSVCRT_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment