Piotr Caban : msvcp90: Added basic_istream::operator>>(char&) implementation.
Module: wine Branch: master Commit: c1ae61b07f6f9d85188b7613cfdecb69a1e80597 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c1ae61b07f6f9d85188b7613cf... Author: Piotr Caban <piotr(a)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(a)D@std@@@std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AAV10@AAD(a)Z */ +/* ??$?5DU?$char_traits(a)D@std@@@std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AEAV10@AEAD(a)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(a)_W@std@@@std@@YAAAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AAV10@AA_W(a)Z */ +/* ??$?5_WU?$char_traits(a)_W@std@@@std@@YAAEAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AEAV10@AEA_W(a)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(a)DU?$char_traits(a)D@std@@@std@@QAE(a)PAV?$basic_streambuf(a)DU?$char_traits(a)D@std@@@1@@Z */ /* ??0?$basic_iostream(a)DU?$char_traits(a)D@std@@@std@@QEAA(a)PEAV?$basic_streambuf(a)DU?$char_traits(a)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(a)D@std@@@std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AAV10@AAD(a)Z -@ stub -arch=win64 ??$?5DU?$char_traits(a)D@std@@@std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AEAV10@AEAD(a)Z +@ cdecl -arch=win32 ??$?5DU?$char_traits(a)D@std@@@std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AAV10@AAD(a)Z(ptr ptr) basic_istream_char_read_ch +@ cdecl -arch=win64 ??$?5DU?$char_traits(a)D@std@@@std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AEAV10@AEAD(a)Z(ptr ptr) basic_istream_char_read_ch @ stub -arch=win32 ??$?5DU?$char_traits(a)D@std@@@std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AAV10@PAD(a)Z @ stub -arch=win64 ??$?5DU?$char_traits(a)D@std@@@std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AEAV10@PEAD(a)Z @ cdecl -arch=win32 ??$?5DU?$char_traits(a)D@std@@V?$allocator(a)D@1@@std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AAV10@AAV?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@0@@Z(ptr ptr) basic_istream_char_get_bstr @@ -36,8 +36,8 @@ @ stub -arch=win64 ??$?5U?$char_traits(a)D@std@@@std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AEAV10@PEAC(a)Z @ stub -arch=win32 ??$?5U?$char_traits(a)D@std@@@std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AAV10@PAE(a)Z @ stub -arch=win64 ??$?5U?$char_traits(a)D@std@@@std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@0(a)AEAV10@PEAE(a)Z -@ stub -arch=win32 ??$?5_WU?$char_traits(a)_W@std@@@std@@YAAAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AAV10@AA_W(a)Z -@ stub -arch=win64 ??$?5_WU?$char_traits(a)_W@std@@@std@@YAAEAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AEAV10@AEA_W(a)Z +@ cdecl -arch=win32 ??$?5_WU?$char_traits(a)_W@std@@@std@@YAAAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AAV10@AA_W(a)Z(ptr ptr) basic_istream_wchar_read_ch +@ cdecl -arch=win64 ??$?5_WU?$char_traits(a)_W@std@@@std@@YAAEAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AEAV10@AEA_W(a)Z(ptr ptr) basic_istream_wchar_read_ch @ stub -arch=win32 ??$?5_WU?$char_traits(a)_W@std@@@std@@YAAAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AAV10@PA_W(a)Z @ stub -arch=win64 ??$?5_WU?$char_traits(a)_W@std@@@std@@YAAEAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AEAV10@PEA_W(a)Z @ cdecl -arch=win32 ??$?5_WU?$char_traits(a)_W@std@@V?$allocator(a)_W@1@@std@@YAAAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@0(a)AAV10@AAV?$basic_string(a)_WU?$char_traits(a)_W@std@@V?$allocator(a)_W@2@@0@@Z(ptr ptr) basic_istream_wchar_get_bstr
participants (1)
-
Alexandre Julliard