Module: wine Branch: master Commit: b9fbe6d5e686508130811df6bcbba15db54e73e4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b9fbe6d5e686508130811df6bc...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Jun 15 11:07:49 2012 +0200
msvcp90: Added cin, cout and cerr objects.
---
dlls/msvcp90/ios.c | 54 +++++++++++++++++++++++++++++++++++++++++++ dlls/msvcp90/msvcp90.h | 3 ++ dlls/msvcp90/msvcp90.spec | 18 +++++++------- dlls/msvcp90/msvcp90_main.c | 2 + 4 files changed, 68 insertions(+), 9 deletions(-)
diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index 4fd7640..12d319f 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -5507,3 +5507,57 @@ basic_filebuf_char* __thiscall basic_fstream_char_rdbuf(const basic_fstream_char TRACE("(%p)\n", this); return (basic_filebuf_char*)&this->filebuf; } + +static basic_filebuf_char filebuf_stdin; +/* ?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A */ +struct { + basic_istream_char obj; + basic_ios_char vbase; +} cin = { { 0 } }; +/* ?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A */ +/* ?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA */ +basic_istream_char *_Ptr_cin = &cin.obj; + +static basic_filebuf_char filebuf_stdout; +/* ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */ +struct { + basic_ostream_char obj; + basic_ios_char vbase; +} cout = { { 0 } }; +/* ?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */ +/* ?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */ +basic_ostream_char *_Ptr_cout = &cout.obj; + +static basic_filebuf_char filebuf_stderr; +/* ?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */ +struct { + basic_ostream_char obj; + basic_ios_char vbase; +} cerr = { { 0 } }; +/* ?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */ +/* ?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */ +basic_ostream_char *_Ptr_cerr = &cerr.obj; + +void init_io(void) +{ + basic_filebuf_char_ctor_file(&filebuf_stdin, stdin); + basic_istream_char_ctor(&cin.obj, &filebuf_stdin.base, FALSE/*FIXME*/, TRUE); + + basic_filebuf_char_ctor_file(&filebuf_stdout, stdout); + basic_ostream_char_ctor(&cout.obj, &filebuf_stdout.base, FALSE/*FIXME*/, TRUE); + + basic_filebuf_char_ctor_file(&filebuf_stderr, stderr); + basic_ostream_char_ctor(&cerr.obj, &filebuf_stderr.base, FALSE/*FIXME*/, TRUE); +} + +void free_io(void) +{ + basic_istream_char_dtor(&cin.obj); + basic_filebuf_char_dtor(&filebuf_stdin); + + basic_ostream_char_dtor(&cout.obj); + basic_filebuf_char_dtor(&filebuf_stdout); + + basic_ostream_char_dtor(&cerr.obj); + basic_filebuf_char_dtor(&filebuf_stderr); +} diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h index a7091ee..45adcc9 100644 --- a/dlls/msvcp90/msvcp90.h +++ b/dlls/msvcp90/msvcp90.h @@ -371,3 +371,6 @@ mutex* __thiscall mutex_ctor(mutex*); void __thiscall mutex_dtor(mutex*); void __thiscall mutex_lock(mutex*); void __thiscall mutex_unlock(mutex*); + +void init_io(void); +void free_io(void); diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index 5290c68..84d9364 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -2694,14 +2694,14 @@ @ cdecl -arch=win64 ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ(ptr) basic_streambuf_wchar__Pninc @ thiscall -arch=win32 ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ(ptr) basic_streambuf_wchar__Pninc @ cdecl -arch=win64 ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ(ptr) basic_streambuf_wchar__Pninc -# extern -arch=win32 ?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A -# extern -arch=win64 ?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA -# extern -arch=win32 ?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A -# extern -arch=win64 ?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA +@ extern -arch=win32 ?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A _Ptr_cerr +@ extern -arch=win64 ?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA _Ptr_cerr +@ extern -arch=win32 ?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A _Ptr_cin +@ extern -arch=win64 ?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA _Ptr_cin # extern -arch=win32 ?_Ptr_clog@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A # extern -arch=win64 ?_Ptr_clog@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA -# extern -arch=win32 ?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A -# extern -arch=win64 ?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA +@ extern -arch=win32 ?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A _Ptr_cout +@ extern -arch=win64 ?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA _Ptr_cout # extern -arch=win32 ?_Ptr_wcerr@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A # extern -arch=win64 ?_Ptr_wcerr@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA # extern -arch=win32 ?_Ptr_wcerr@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A @@ -3053,8 +3053,8 @@ @ cdecl -arch=win64 ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ(ptr) MSVCP_basic_string_wchar_capacity @ thiscall -arch=win32 ?capacity@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ(ptr) MSVCP_basic_string_wchar_capacity @ cdecl -arch=win64 ?capacity@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ(ptr) MSVCP_basic_string_wchar_capacity -# extern ?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A -# extern ?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A +@ extern ?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A cerr +@ extern ?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A cin @ cdecl -arch=win32 ?classic@locale@std@@SAABV12@XZ() locale_classic @ cdecl -arch=win64 ?classic@locale@std@@SAAEBV12@XZ() locale_classic @ cdecl -arch=win32 ?classic_table@?$ctype@D@std@@KAPBFXZ() ctype_char_classic_table @@ -3191,7 +3191,7 @@ @ cdecl ?cos@?$_Ctraits@M@std@@SAMM@Z(float) std_Ctraits_float_cos @ cdecl ?cos@?$_Ctraits@N@std@@SANN@Z(double) std_Ctraits_double_cos @ cdecl ?cos@?$_Ctraits@O@std@@SAOO@Z(double) std_Ctraits_long_double_cos -# extern ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A +@ extern ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A cout @ stub -arch=win32 ?curr_symbol@?$_Mpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ @ stub -arch=win64 ?curr_symbol@?$_Mpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ @ stub -arch=win32 ?curr_symbol@?$_Mpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ diff --git a/dlls/msvcp90/msvcp90_main.c b/dlls/msvcp90/msvcp90_main.c index de036e5..a7dc864 100644 --- a/dlls/msvcp90/msvcp90_main.c +++ b/dlls/msvcp90/msvcp90_main.c @@ -90,8 +90,10 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) case DLL_PROCESS_ATTACH: init_cxx_funcs(); init_lockit(); + init_io(); break; case DLL_PROCESS_DETACH: + free_io(); free_locale(); free_lockit(); break;