Piotr Caban : msvcp90: Added basic_istream::operator>>(char&) implementation.

Alexandre Julliard julliard at winehq.org
Wed Jun 27 19:13:59 CDT 2012


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Jun 27 11:15:49 2012 +0200

msvcp90: Added basic_istream::operator>>(char&) implementation.

---

 dlls/msvcp90/ios.c        |   48 +++++++++++++++++++++++++++++++++++++++++++++
 dlls/msvcp90/msvcp90.spec |    8 +++---
 2 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c
index b3e541e..0950077 100644
--- a/dlls/msvcp90/ios.c
+++ b/dlls/msvcp90/ios.c
@@ -5755,6 +5755,30 @@ basic_istream_char* __cdecl basic_istream_char_get_bstr(
     return istream;
 }
 
+/* ??$?5DU?$char_traits at D@std@@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAD at Z */
+/* ??$?5DU?$char_traits at D@std@@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAD at Z */
+basic_istream_char* __cdecl basic_istream_char_read_ch(basic_istream_char *istream, char *ch)
+{
+    IOSB_iostate state = IOSTATE_failbit;
+    int c = 0;
+
+    TRACE("(%p %p)\n", istream, ch);
+
+    if(basic_istream_char_sentry_create(istream, FALSE)) {
+        c = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(
+                    basic_istream_char_get_basic_ios(istream)));
+        if(c != EOF) {
+            state = IOSTATE_goodbit;
+            *ch = c;
+        }
+    }
+    basic_istream_char_sentry_destroy(istream);
+
+    basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream),
+            state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
+    return istream;
+}
+
 /* Caution: basic_istream uses virtual inheritance. */
 static inline basic_ios_wchar* basic_istream_wchar_get_basic_ios(basic_istream_wchar *this)
 {
@@ -6783,6 +6807,30 @@ basic_istream_wchar* __cdecl basic_istream_wchar_get_bstr(
     return istream;
 }
 
+/* ??$?5_WU?$char_traits at _W@std@@@std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AAV10@AA_W at Z */
+/* ??$?5_WU?$char_traits at _W@std@@@std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AEAV10@AEA_W at Z */
+basic_istream_wchar* __cdecl basic_istream_wchar_read_ch(basic_istream_wchar *istream, wchar_t *ch)
+{
+    IOSB_iostate state = IOSTATE_failbit;
+    unsigned short c = 0;
+
+    TRACE("(%p %p)\n", istream, ch);
+
+    if(basic_istream_wchar_sentry_create(istream, FALSE)) {
+        c = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(
+                    basic_istream_wchar_get_basic_ios(istream)));
+        if(c != WEOF) {
+            state = IOSTATE_goodbit;
+            *ch = c;
+        }
+    }
+    basic_istream_wchar_sentry_destroy(istream);
+
+    basic_ios_wchar_setstate(basic_istream_wchar_get_basic_ios(istream),
+            state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
+    return istream;
+}
+
 /* ??0?$basic_iostream at DU?$char_traits at D@std@@@std@@QAE at PAV?$basic_streambuf at DU?$char_traits at D@std@@@1@@Z */
 /* ??0?$basic_iostream at DU?$char_traits at D@std@@@std@@QEAA at PEAV?$basic_streambuf at DU?$char_traits at D@std@@@1@@Z */
 DEFINE_THISCALL_WRAPPER(basic_iostream_char_ctor, 12)
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index d1efc78..6d2656c 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -1,5 +1,5 @@
-@ stub -arch=win32 ??$?5DU?$char_traits at D@std@@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAD at Z
-@ stub -arch=win64 ??$?5DU?$char_traits at D@std@@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAD at Z
+@ cdecl -arch=win32 ??$?5DU?$char_traits at D@std@@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAD at Z(ptr ptr) basic_istream_char_read_ch
+@ cdecl -arch=win64 ??$?5DU?$char_traits at D@std@@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAD at Z(ptr ptr) basic_istream_char_read_ch
 @ stub -arch=win32 ??$?5DU?$char_traits at D@std@@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@PAD at Z
 @ stub -arch=win64 ??$?5DU?$char_traits at D@std@@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@PEAD at Z
 @ cdecl -arch=win32 ??$?5DU?$char_traits at D@std@@V?$allocator at D@1@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z(ptr ptr) basic_istream_char_get_bstr
@@ -36,8 +36,8 @@
 @ stub -arch=win64 ??$?5U?$char_traits at D@std@@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@PEAC at Z
 @ stub -arch=win32 ??$?5U?$char_traits at D@std@@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@PAE at Z
 @ stub -arch=win64 ??$?5U?$char_traits at D@std@@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@PEAE at Z
-@ stub -arch=win32 ??$?5_WU?$char_traits at _W@std@@@std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AAV10@AA_W at Z
-@ stub -arch=win64 ??$?5_WU?$char_traits at _W@std@@@std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AEAV10@AEA_W at Z
+@ cdecl -arch=win32 ??$?5_WU?$char_traits at _W@std@@@std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AAV10@AA_W at Z(ptr ptr) basic_istream_wchar_read_ch
+@ cdecl -arch=win64 ??$?5_WU?$char_traits at _W@std@@@std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AEAV10@AEA_W at Z(ptr ptr) basic_istream_wchar_read_ch
 @ stub -arch=win32 ??$?5_WU?$char_traits at _W@std@@@std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AAV10@PA_W at Z
 @ stub -arch=win64 ??$?5_WU?$char_traits at _W@std@@@std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AEAV10@PEA_W at Z
 @ cdecl -arch=win32 ??$?5_WU?$char_traits at _W@std@@V?$allocator at _W@1@@std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@0 at AAV10@AAV?$basic_string at _WU?$char_traits at _W@std@@V?$allocator at _W@2@@0@@Z(ptr ptr) basic_istream_wchar_get_bstr




More information about the wine-cvs mailing list