Module: wine Branch: master Commit: b9fbe6d5e686508130811df6bcbba15db54e73e4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b9fbe6d5e686508130811df6bc... Author: Piotr Caban <piotr(a)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(a)std@@3V?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)A */ +struct { + basic_istream_char obj; + basic_ios_char vbase; +} cin = { { 0 } }; +/* ?_Ptr_cin(a)std@@3PAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)A */ +/* ?_Ptr_cin(a)std@@3PEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)EA */ +basic_istream_char *_Ptr_cin = &cin.obj; + +static basic_filebuf_char filebuf_stdout; +/* ?cout(a)std@@3V?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A */ +struct { + basic_ostream_char obj; + basic_ios_char vbase; +} cout = { { 0 } }; +/* ?_Ptr_cout(a)std@@3PAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A */ +/* ?_Ptr_cout(a)std@@3PEAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)EA */ +basic_ostream_char *_Ptr_cout = &cout.obj; + +static basic_filebuf_char filebuf_stderr; +/* ?cerr(a)std@@3V?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A */ +struct { + basic_ostream_char obj; + basic_ios_char vbase; +} cerr = { { 0 } }; +/* ?_Ptr_cerr(a)std@@3PAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A */ +/* ?_Ptr_cerr(a)std@@3PEAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)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(a)GU?$char_traits(a)G@std@@@std@@IEAAPEAGXZ(ptr) basic_streambuf_wchar__Pninc @ thiscall -arch=win32 ?_Pninc@?$basic_streambuf(a)_WU?$char_traits(a)_W@std@@@std@@IAEPA_WXZ(ptr) basic_streambuf_wchar__Pninc @ cdecl -arch=win64 ?_Pninc@?$basic_streambuf(a)_WU?$char_traits(a)_W@std@@@std@@IEAAPEA_WXZ(ptr) basic_streambuf_wchar__Pninc -# extern -arch=win32 ?_Ptr_cerr(a)std@@3PAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A -# extern -arch=win64 ?_Ptr_cerr(a)std@@3PEAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)EA -# extern -arch=win32 ?_Ptr_cin(a)std@@3PAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)A -# extern -arch=win64 ?_Ptr_cin(a)std@@3PEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)EA +@ extern -arch=win32 ?_Ptr_cerr(a)std@@3PAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A _Ptr_cerr +@ extern -arch=win64 ?_Ptr_cerr(a)std@@3PEAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)EA _Ptr_cerr +@ extern -arch=win32 ?_Ptr_cin(a)std@@3PAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)A _Ptr_cin +@ extern -arch=win64 ?_Ptr_cin(a)std@@3PEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)EA _Ptr_cin # extern -arch=win32 ?_Ptr_clog(a)std@@3PAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A # extern -arch=win64 ?_Ptr_clog(a)std@@3PEAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)EA -# extern -arch=win32 ?_Ptr_cout(a)std@@3PAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A -# extern -arch=win64 ?_Ptr_cout(a)std@@3PEAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)EA +@ extern -arch=win32 ?_Ptr_cout(a)std@@3PAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A _Ptr_cout +@ extern -arch=win64 ?_Ptr_cout(a)std@@3PEAV?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)EA _Ptr_cout # extern -arch=win32 ?_Ptr_wcerr(a)std@@3PAV?$basic_ostream(a)GU?$char_traits(a)G@std@@@1(a)A # extern -arch=win64 ?_Ptr_wcerr(a)std@@3PEAV?$basic_ostream(a)GU?$char_traits(a)G@std@@@1(a)EA # extern -arch=win32 ?_Ptr_wcerr(a)std@@3PAV?$basic_ostream(a)_WU?$char_traits(a)_W@std@@@1(a)A @@ -3053,8 +3053,8 @@ @ cdecl -arch=win64 ?capacity@?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QEBA_KXZ(ptr) MSVCP_basic_string_wchar_capacity @ thiscall -arch=win32 ?capacity@?$basic_string(a)_WU?$char_traits(a)_W@std@@V?$allocator(a)_W@2@@std@@QBEIXZ(ptr) MSVCP_basic_string_wchar_capacity @ cdecl -arch=win64 ?capacity@?$basic_string(a)_WU?$char_traits(a)_W@std@@V?$allocator(a)_W@2@@std@@QEBA_KXZ(ptr) MSVCP_basic_string_wchar_capacity -# extern ?cerr(a)std@@3V?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A -# extern ?cin(a)std@@3V?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)A +@ extern ?cerr(a)std@@3V?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A cerr +@ extern ?cin(a)std@@3V?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)A cin @ cdecl -arch=win32 ?classic(a)locale@std@@SAABV12(a)XZ() locale_classic @ cdecl -arch=win64 ?classic(a)locale@std@@SAAEBV12(a)XZ() locale_classic @ cdecl -arch=win32 ?classic_table@?$ctype(a)D@std@@KAPBFXZ() ctype_char_classic_table @@ -3191,7 +3191,7 @@ @ cdecl ?cos@?$_Ctraits(a)M@std@@SAMM(a)Z(float) std_Ctraits_float_cos @ cdecl ?cos@?$_Ctraits(a)N@std@@SANN(a)Z(double) std_Ctraits_double_cos @ cdecl ?cos@?$_Ctraits(a)O@std@@SAOO(a)Z(double) std_Ctraits_long_double_cos -# extern ?cout(a)std@@3V?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A +@ extern ?cout(a)std@@3V?$basic_ostream(a)DU?$char_traits(a)D@std@@@1(a)A cout @ stub -arch=win32 ?curr_symbol@?$_Mpunct(a)D@std@@QBE?AV?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@2(a)XZ @ stub -arch=win64 ?curr_symbol@?$_Mpunct(a)D@std@@QEBA?AV?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@2(a)XZ @ stub -arch=win32 ?curr_symbol@?$_Mpunct(a)G@std@@QBE?AV?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@2(a)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;