Piotr Caban : msvcp90: Added basic_istream<char>::getline(basic_string<char >) implementation.

Alexandre Julliard julliard at winehq.org
Tue Jun 12 13:36:34 CDT 2012


Module: wine
Branch: master
Commit: 0db98a30b99bcfc6135a4608d7bb34f61af375d1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0db98a30b99bcfc6135a4608d7bb34f61af375d1

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Jun 12 18:14:09 2012 +0200

msvcp90: Added basic_istream<char>::getline(basic_string<char>) implementation.

---

 dlls/msvcp90/ios.c        |   33 +++++++++++++++++++++++++++++++++
 dlls/msvcp90/msvcp90.h    |    2 ++
 dlls/msvcp90/msvcp90.spec |    8 ++++----
 3 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c
index 8f4c216..97edacf 100644
--- a/dlls/msvcp90/ios.c
+++ b/dlls/msvcp90/ios.c
@@ -4630,6 +4630,39 @@ basic_istream_char* __thiscall basic_istream_char_read_bool(basic_istream_char *
     return NULL;
 }
 
+/* ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@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 at D@Z */
+/* ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z */
+basic_istream_char* __cdecl basic_istream_char_getline_str_delim(
+        basic_istream_char *istream, basic_string_char *str, char delim)
+{
+    IOSB_iostate state = IOSTATE_failbit;
+    int c;
+
+    TRACE("(%p %p %c)\n", istream, str, delim);
+
+    if(basic_istream_char_sentry_create(istream, TRUE)) {
+        MSVCP_basic_string_char_clear(str);
+
+        for(c = basic_istream_char_get(istream); c!=delim && c!=EOF;
+                c = basic_istream_char_get(istream)) {
+            state = IOSTATE_goodbit;
+            MSVCP_basic_string_char_append_ch(str, c);
+        }
+    }
+    basic_istream_char_sentry_destroy(istream);
+
+    basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream), state);
+    return istream;
+}
+
+/* ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@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 */
+/* ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z */
+basic_istream_char* __cdecl basic_istream_char_getline_str(
+        basic_istream_char *istream, basic_string_char *str)
+{
+    return basic_istream_char_getline_str_delim(istream, str, '\n');
+}
+
 /* ??0?$basic_ifstream at DU?$char_traits at D@std@@@std@@QAE at XZ */
 /* ??0?$basic_ifstream at DU?$char_traits at D@std@@@std@@QEAA at XZ */
 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor, 8)
diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h
index ba5b0a7..5ca938c 100644
--- a/dlls/msvcp90/msvcp90.h
+++ b/dlls/msvcp90/msvcp90.h
@@ -247,6 +247,8 @@ basic_string_char* __stdcall MSVCP_basic_string_char_ctor_cstr(basic_string_char
 basic_string_char* __stdcall MSVCP_basic_string_char_copy_ctor(basic_string_char*, const basic_string_char*);
 void __stdcall MSVCP_basic_string_char_dtor(basic_string_char*);
 const char* __stdcall MSVCP_basic_string_char_c_str(const basic_string_char*);
+void __thiscall MSVCP_basic_string_char_clear(basic_string_char*);
+basic_string_char* __thiscall MSVCP_basic_string_char_append_ch(basic_string_char*, char);
 
 #define BUF_SIZE_WCHAR 8
 typedef struct _basic_string_wchar
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index 03e6c1a..0a6b24a 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -386,10 +386,10 @@
 @ stub -arch=win64 ??$exp at N@std@@YA?AV?$complex at N@0 at AEBV10@@Z
 @ stub -arch=win32 ??$exp at O@std@@YA?AV?$complex at O@0 at ABV10@@Z
 @ stub -arch=win64 ??$exp at O@std@@YA?AV?$complex at O@0 at AEBV10@@Z
-@ stub -arch=win32 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@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
-@ stub -arch=win64 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z
-@ stub -arch=win32 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@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 at D@Z
-@ stub -arch=win64 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z
+@ cdecl -arch=win32 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@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_getline_str
+@ cdecl -arch=win64 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z(ptr ptr) basic_istream_char_getline_str
+@ cdecl -arch=win32 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@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 at D@Z(ptr ptr long) basic_istream_char_getline_str_delim
+@ cdecl -arch=win64 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z(ptr ptr long) basic_istream_char_getline_str_delim
 @ stub -arch=win32 ??$getline at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@0 at AAV10@AAV?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@0@@Z
 @ stub -arch=win64 ??$getline at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@0 at AEAV10@AEAV?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@0@@Z
 @ stub -arch=win32 ??$getline at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@0 at AAV10@AAV?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@0 at G@Z




More information about the wine-cvs mailing list