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