Piotr Caban : msvcp90: Added std::ws(basic_istream) implementation.
Alexandre Julliard
julliard at winehq.org
Wed Sep 12 13:39:16 CDT 2012
Module: wine
Branch: master
Commit: 69e12a9ae931136b60fc5fa65bd793ba9e571320
URL: http://source.winehq.org/git/wine.git/?a=commit;h=69e12a9ae931136b60fc5fa65bd793ba9e571320
Author: Piotr Caban <piotr at 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 at std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@1 at AAV21@@Z */
+/* ?ws at std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@1 at 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 at DU?$char_traits at D@std@@@std@@QAEHXZ */
/* ?peek@?$basic_istream at DU?$char_traits at 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 at std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AAV21@@Z */
+/* ?ws at std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AEAV21@@Z */
+/* ?ws at std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@1 at AAV21@@Z */
+/* ?ws at std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@1 at 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 at _WU?$char_traits at _W@std@@@std@@QAEGXZ */
/* ?peek@?$basic_istream at _WU?$char_traits at _W@std@@@std@@QEAAGXZ */
/* ?peek@?$basic_istream at GU?$char_traits at 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 at GU?$char_traits at G@std@@@std@@QEAAAEAV12 at PEBG_J@Z(ptr wstr long) basic_ostream_wchar_write
@ thiscall -arch=win32 ?write@?$basic_ostream at _WU?$char_traits at _W@std@@@std@@QAEAAV12 at PB_WH@Z(ptr wstr long) basic_ostream_wchar_write
@ cdecl -arch=win64 ?write@?$basic_ostream at _WU?$char_traits at _W@std@@@std@@QEAAAEAV12 at PEB_W_J@Z(ptr wstr long) basic_ostream_wchar_write
-@ stub -arch=win32 ?ws at std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@1 at AAV21@@Z
-@ stub -arch=win64 ?ws at std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@1 at AEAV21@@Z
-@ stub -arch=win32 ?ws at std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@1 at AAV21@@Z
-@ stub -arch=win64 ?ws at std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@1 at AEAV21@@Z
-@ stub -arch=win32 ?ws at std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AAV21@@Z
-@ stub -arch=win64 ?ws at std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AEAV21@@Z
+@ cdecl -arch=win32 ?ws at std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@1 at AAV21@@Z(ptr) ws_basic_istream_char
+@ cdecl -arch=win64 ?ws at std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@1 at AEAV21@@Z(ptr) ws_basic_istream_char
+@ cdecl -arch=win32 ?ws at std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@1 at AAV21@@Z(ptr) ws_basic_istream_wchar
+@ cdecl -arch=win64 ?ws at std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@1 at AEAV21@@Z(ptr) ws_basic_istream_wchar
+@ cdecl -arch=win32 ?ws at std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AAV21@@Z(ptr) ws_basic_istream_wchar
+@ cdecl -arch=win64 ?ws at std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AEAV21@@Z(ptr) ws_basic_istream_wchar
@ cdecl ?xalloc at ios_base@std@@SAHXZ() ios_base_xalloc
@ thiscall -arch=win32 ?xsgetn@?$basic_streambuf at DU?$char_traits at D@std@@@std@@MAEHPADH at Z(ptr ptr long) basic_streambuf_char_xsgetn
@ cdecl -arch=win64 ?xsgetn@?$basic_streambuf at DU?$char_traits at D@std@@@std@@MEAA_JPEAD_J at Z(ptr ptr long) basic_streambuf_char_xsgetn
More information about the wine-cvs
mailing list