Module: wine Branch: master Commit: 69e12a9ae931136b60fc5fa65bd793ba9e571320 URL: http://source.winehq.org/git/wine.git/?a=commit;h=69e12a9ae931136b60fc5fa65b...
Author: Piotr Caban piotr@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@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@1@AAV21@@Z */ +/* ?ws@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@1@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@DU?$char_traits@D@std@@@std@@QAEHXZ */ /* ?peek@?$basic_istream@DU?$char_traits@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@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */ +/* ?ws@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */ +/* ?ws@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@1@AAV21@@Z */ +/* ?ws@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@1@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@_WU?$char_traits@_W@std@@@std@@QAEGXZ */ /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */ /* ?peek@?$basic_istream@GU?$char_traits@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@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z(ptr wstr long) basic_ostream_wchar_write @ thiscall -arch=win32 ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_WH@Z(ptr wstr long) basic_ostream_wchar_write @ cdecl -arch=win64 ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z(ptr wstr long) basic_ostream_wchar_write -@ stub -arch=win32 ?ws@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@1@AAV21@@Z -@ stub -arch=win64 ?ws@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@1@AEAV21@@Z -@ stub -arch=win32 ?ws@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@1@AAV21@@Z -@ stub -arch=win64 ?ws@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@1@AEAV21@@Z -@ stub -arch=win32 ?ws@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AAV21@@Z -@ stub -arch=win64 ?ws@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z +@ cdecl -arch=win32 ?ws@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@1@AAV21@@Z(ptr) ws_basic_istream_char +@ cdecl -arch=win64 ?ws@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@1@AEAV21@@Z(ptr) ws_basic_istream_char +@ cdecl -arch=win32 ?ws@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@1@AAV21@@Z(ptr) ws_basic_istream_wchar +@ cdecl -arch=win64 ?ws@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@1@AEAV21@@Z(ptr) ws_basic_istream_wchar +@ cdecl -arch=win32 ?ws@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AAV21@@Z(ptr) ws_basic_istream_wchar +@ cdecl -arch=win64 ?ws@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z(ptr) ws_basic_istream_wchar @ cdecl ?xalloc@ios_base@std@@SAHXZ() ios_base_xalloc @ thiscall -arch=win32 ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADH@Z(ptr ptr long) basic_streambuf_char_xsgetn @ cdecl -arch=win64 ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z(ptr ptr long) basic_streambuf_char_xsgetn