Piotr Caban : msvcp90: Added cin, cout and cerr objects.

Alexandre Julliard julliard at winehq.org
Fri Jun 15 13:34:39 CDT 2012


Module: wine
Branch: master
Commit: b9fbe6d5e686508130811df6bcbba15db54e73e4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b9fbe6d5e686508130811df6bcbba15db54e73e4

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




More information about the wine-cvs mailing list