Module: wine Branch: master Commit: 69e12a9ae931136b60fc5fa65bd793ba9e571320 URL: http://source.winehq.org/git/wine.git/?a=commit;h=69e12a9ae931136b60fc5fa65b... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Wed Sep 12 13:26:50 2012 +0200 msvcp90: Added std::ws(basic_istream) implementation. --- dlls/msvcp90/ios.c | 54 +++++++++++++++++++++++++++++++++++++++++++++ dlls/msvcp90/msvcp90.spec | 12 +++++----- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index 699ac98..39e9a9f 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -7519,6 +7519,32 @@ basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *thi return this; } +/* ?ws(a)std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)AAV21@@Z */ +/* ?ws(a)std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)AEAV21@@Z */ +basic_istream_char* __cdecl ws_basic_istream_char(basic_istream_char *istream) +{ + basic_ios_char *base = basic_istream_char_get_basic_ios(istream); + int ch = '\n'; + + TRACE("(%p)\n", istream); + + if(basic_istream_char_sentry_create(istream, TRUE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const ctype_char *ctype = ctype_char_use_facet(strbuf->loc); + + for(ch = basic_streambuf_char_sgetc(strbuf); ctype_char_is_ch(ctype, _SPACE, ch); + ch = basic_streambuf_char_snextc(strbuf)) { + if(ch == EOF) + break; + } + } + basic_istream_char_sentry_destroy(istream); + + if(ch == EOF) + basic_ios_char_setstate(base, IOSTATE_eofbit); + return istream; +} + /* ?peek@?$basic_istream(a)DU?$char_traits(a)D@std@@@std@@QAEHXZ */ /* ?peek@?$basic_istream(a)DU?$char_traits(a)D@std@@@std@@QEAAHXZ */ DEFINE_THISCALL_WRAPPER(basic_istream_char_peek, 4) @@ -8750,6 +8776,34 @@ basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar * return this; } +/* ?ws(a)std@@YAAAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@1(a)AAV21@@Z */ +/* ?ws(a)std@@YAAEAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@1(a)AEAV21@@Z */ +/* ?ws(a)std@@YAAAV?$basic_istream(a)GU?$char_traits(a)G@std@@@1(a)AAV21@@Z */ +/* ?ws(a)std@@YAAEAV?$basic_istream(a)GU?$char_traits(a)G@std@@@1(a)AEAV21@@Z */ +basic_istream_wchar* __cdecl ws_basic_istream_wchar(basic_istream_wchar *istream) +{ + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream); + unsigned short ch = '\n'; + + TRACE("(%p)\n", istream); + + if(basic_istream_wchar_sentry_create(istream, TRUE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + const ctype_wchar *ctype = ctype_wchar_use_facet(strbuf->loc); + + for(ch = basic_streambuf_wchar_sgetc(strbuf); ctype_wchar_is_ch(ctype, _SPACE, ch); + ch = basic_streambuf_wchar_snextc(strbuf)) { + if(ch == WEOF) + break; + } + } + basic_istream_wchar_sentry_destroy(istream); + + if(ch == WEOF) + basic_ios_wchar_setstate(base, IOSTATE_eofbit); + return istream; +} + /* ?peek@?$basic_istream(a)_WU?$char_traits(a)_W@std@@@std@@QAEGXZ */ /* ?peek@?$basic_istream(a)_WU?$char_traits(a)_W@std@@@std@@QEAAGXZ */ /* ?peek@?$basic_istream(a)GU?$char_traits(a)G@std@@@std@@QAEGXZ */ diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index a14225a..b70fd27 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -5711,12 +5711,12 @@ @ cdecl -arch=win64 ?write@?$basic_ostream(a)GU?$char_traits(a)G@std@@@std@@QEAAAEAV12(a)PEBG_J@Z(ptr wstr long) basic_ostream_wchar_write @ thiscall -arch=win32 ?write@?$basic_ostream(a)_WU?$char_traits(a)_W@std@@@std@@QAEAAV12(a)PB_WH@Z(ptr wstr long) basic_ostream_wchar_write @ cdecl -arch=win64 ?write@?$basic_ostream(a)_WU?$char_traits(a)_W@std@@@std@@QEAAAEAV12(a)PEB_W_J@Z(ptr wstr long) basic_ostream_wchar_write -@ stub -arch=win32 ?ws(a)std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)AAV21@@Z -@ stub -arch=win64 ?ws(a)std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)AEAV21@@Z -@ stub -arch=win32 ?ws(a)std@@YAAAV?$basic_istream(a)GU?$char_traits(a)G@std@@@1(a)AAV21@@Z -@ stub -arch=win64 ?ws(a)std@@YAAEAV?$basic_istream(a)GU?$char_traits(a)G@std@@@1(a)AEAV21@@Z -@ stub -arch=win32 ?ws(a)std@@YAAAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@1(a)AAV21@@Z -@ stub -arch=win64 ?ws(a)std@@YAAEAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@1(a)AEAV21@@Z +@ cdecl -arch=win32 ?ws(a)std@@YAAAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)AAV21@@Z(ptr) ws_basic_istream_char +@ cdecl -arch=win64 ?ws(a)std@@YAAEAV?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)AEAV21@@Z(ptr) ws_basic_istream_char +@ cdecl -arch=win32 ?ws(a)std@@YAAAV?$basic_istream(a)GU?$char_traits(a)G@std@@@1(a)AAV21@@Z(ptr) ws_basic_istream_wchar +@ cdecl -arch=win64 ?ws(a)std@@YAAEAV?$basic_istream(a)GU?$char_traits(a)G@std@@@1(a)AEAV21@@Z(ptr) ws_basic_istream_wchar +@ cdecl -arch=win32 ?ws(a)std@@YAAAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@1(a)AAV21@@Z(ptr) ws_basic_istream_wchar +@ cdecl -arch=win64 ?ws(a)std@@YAAEAV?$basic_istream(a)_WU?$char_traits(a)_W@std@@@1(a)AEAV21@@Z(ptr) ws_basic_istream_wchar @ cdecl ?xalloc(a)ios_base@std@@SAHXZ() ios_base_xalloc @ thiscall -arch=win32 ?xsgetn@?$basic_streambuf(a)DU?$char_traits(a)D@std@@@std@@MAEHPADH(a)Z(ptr ptr long) basic_streambuf_char_xsgetn @ cdecl -arch=win64 ?xsgetn@?$basic_streambuf(a)DU?$char_traits(a)D@std@@@std@@MEAA_JPEAD_J(a)Z(ptr ptr long) basic_streambuf_char_xsgetn